如何在 .netframework API 中使用 OAuth 2.0 On-Behalf-Of
Posted
技术标签:
【中文标题】如何在 .netframework API 中使用 OAuth 2.0 On-Behalf-Of【英文标题】:How to use OAuth 2.0 On-Behalf-Of in .netframework API 【发布时间】:2021-05-16 14:52:17 【问题描述】:我有 2 个 API,我想使用 OAuth 2.0 On-Behalf-Of 流在 API1 中生成令牌并使用生成的令牌授权给 API2。
我关注了https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#middle-tier-access-token-request,并且能够生成令牌。 我使用以下参数:
grant_type:urn:ietf:params:oauth:grant-type:jwt-bearer
client_id:xxxxx
client_secret:xxxxxx
requested_token_use:on_behalf_of
scope:https://graph.microsoft.com/user.read
但我不知道如何使用该令牌对我的 API2 进行身份验证并获取用户以及下一步是什么。我的 API 使用 .netframework 应用程序。
我创建了 OwinStartup 并添加了 UseWindowsAzureActiveDirectoryBearerAuthentication
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions()
Tenant = "xxxxxxxxxx",// Azure tenant Id
TokenValidationParameters = new TokenValidationParameters()
SaveSigninToken = true,
ValidAudience = "https://graph.microsoft.com"
);
并将 Authorize 属性添加到我的控制器中。但是当我调用该控制器的 get 端点时,它给了我一个错误说: 此请求的授权已被拒绝。
【问题讨论】:
【参考方案1】:你需要请求两个令牌,一个是API A的访问令牌,另一个是使用API的访问令牌获得的API B的访问令牌A 作为参数。
你参考的文档是基于你获取的api A access token,有instructions in the document。
首先需要使用auth code flow或其他登录流程获取api A的访问令牌:
然后以API A的访问令牌为参数,获取API B的访问令牌。
【讨论】:
我已经在 API A 中完成了那部分,并且我有令牌。但是当我将访问令牌作为 Authorization(Bearer) 标头传递给 API B 时,我得到了一个错误。此请求的授权已被拒绝。我在 API B statup.cs 类中添加了 app.UseWindowsAzureActiveDirectoryBearerAuthentication。但没有帮助【参考方案2】:在 API A 中,我使用了错误的范围来生成令牌。 https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#middle-tier-access-token-request
【讨论】:
以上是关于如何在 .netframework API 中使用 OAuth 2.0 On-Behalf-Of的主要内容,如果未能解决你的问题,请参考以下文章
无法在 .netframework 4.61 API 中安装 IdentityServer3.AccessTokenValidation
使用 .NET Framework 3.5 在 C# 中调用 Web API
如何在 Web ASP.NET (.NET Framework) 中创建启动文件?