如何在 .netframework 中使用 OAuth 2.0 On-Behalf-Of API

How to use OAuth 2.0 On-Behalf-Of in .netframework API

我有 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 端点时,它给了我一条错误消息: 此请求的授权已被拒绝。

你需要申请两个token,一个是APIA的access token,一个是[=的access token 30=] B 使用API A 的访问令牌作为参数获得。

您参考的文档是根据您获得的api个访问令牌,有instructions in the document.

首先需要使用auth code flow或其他登录流程获取api的access token A:

然后用APIA的access token作为参数获取APIB的access token。

在 API A 中,我使用了错误的范围来生成令牌。 https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#middle-tier-access-token-request