首页 文章

如何生成Bearer令牌以调用远程Web API

提问于
浏览
9

我有两个站点,一个用户登录并管理他们的帐户的站点和没有UI的站点,它只不过是一个存储和检索内容的API . 这两个站点都使用相同的Owin ASP.Net Identity 2.0设置 . 由于显而易见的原因,UI站点使用cookie,API站点使用Bearer令牌 . 我需要能够使用当前用户身份验证从UI站点调用API方法/ URL . 简而言之,我需要在UI站点中生成有效的Bearer令牌,以便在进行Rest API调用时添加到HTTP头 .

我正在寻找一些方法来使用“可信”的客户端身份验证并调用API的/ Token url来生成Bearer令牌,或者因为两个站点共享相同的代码而用户表调用Owin方法来生成Bearer Token in我可以传递给API标头的UI网站代码,API网站将其视为有效标记 .

如果您需要更多信息,请告诉我 .

Update: 请使用oAuth Implicit flow以正确的方式查看下面的更新答案 .

1 回答

  • 13

    我最终找到了这篇文章,并按照其示例代码创建了我们自己的OAuth授权服务器 . 有了它,我们可以代表用户使用我们的UI站点和OAuth服务器之间共享的可信客户端ID和秘密来请求用户令牌 .

    http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server

    Update 1: 在完成了功能和事情的更多工作后,我偶然发现了创建令牌的原因 . Owin中有一个TicketDataFormat类可以完成所有的魔法 . 它在构造函数中接受一个参数,这是一个IDataProtector . 如果Owin资源服务器在其中间件选项中使用默认的AccessTokenFormat(TicketDataFormat);与默认的DataProtector一起,您可以在客户端复制令牌生成 . 顺便说一下,默认的DataProtector使用MachineKey,因此您的两个 trusted 站点必须在web.config中设置相同的MachineKey . 所有不受信任或部分受信任的站点都应使用上面链接中提到的标准oAuth流 .

    var protector = app.CreateDataProtector(typeof(OAuthAuthorizationServerMiddleware).Namespace, "Access_Token", "v1");
    var tdf = new TicketDataFormat(protector);
    var ticket = new AuthenticationTicket(){ ... };
    var accessToken = tdf.Protect(ticket);
    

    Update 2: 推荐的,实际上唯一的方法是使用oAuth与客户端一起使用Implicit流程,并设置正确的范围和响应类型 .

    IdentityServer3 docs有很好的文档教程,可以让我们在很短的时间内运行起来 . 特别是Getting Started: MVC Authentication & Web APIs教程中的Calling the API on behalf of the User部分 .

相关问题