在邮递员中复制经过ADAL.JS认证的请求

时间:2018-08-20 13:06:39

标签: oauth-2.0 azure-active-directory postman adal adal.js

我有一个.NET Web API和一个使用ADAL.js的小型Vanilla-JS应用,并且设法使它们彼此之间很好地交谈并正确进行了身份验证。

如果我console.logadalAuthContext.acquireToken()返回的令牌并在Postman中以Authorization: Bearer {{token}}手动输入,我也可以从后端获得有效的,经过身份验证的响应。

但是,我不知道如何配置Postman的内置OAuth2.0身份验证UI来自动获取令牌。我已经设法通过多种方式获取令牌,但是后端都没有接受令牌。

如何配置Postman以与ADAL.js库相同的方式获取令牌?


为完整起见,下面是一些代码:

后端配置:

public void Configuration(IAppBuilder app)
{
    app.UseCors(CorsOptions.AllowAll);

    app.UseWindowsAzureActiveDirectoryBearerAuthentication(
        new WindowsAzureActiveDirectoryBearerAuthenticationOptions
        {
            TokenValidationParameters = new TokenValidationParameters { ValidAudience = "<app-id>" },
            Tenant = "<tenant>",
            AuthenticationType = "WebAPI"
        });

    var config = new HttpConfiguration();
    config.MapHttpAttributeRoutes();
    app.UseWebApi(config);
}

ADAL.js配置:

const backendUrl = 'http://localhost:55476';
const backendAppId = '<app-id>';

const authContext = new AuthenticationContext({
  clientId: backendAppId,
  tenant: '<tenant>',
  endpoints: [{ [backendAppId]: backendAppId }],
  cacheLocation: 'localStorage'
});

实际发出请求:

authContext.acquireToken(backendAppId, (error, token) => {
   // error handling etc omitted
   fetch(backendUrl, { headers: { Authorization: `Bearer ${token}` } })
       .then(response => response.json())
       .then(console.log)
})

1 个答案:

答案 0 :(得分:1)

因此,由于Azure AD v1终结点不完全符合标准,因此我们必须以一种有点怪异的方式来做事情。

在邮递员中:

  1. 在授权下选择 OAuth 2.0
  2. 点击获取新的访问令牌
  3. 为授予类型选择隐式
  4. 输入应用的回复URL作为回调URL
  5. 输入类似于以下内容的授权URL:https://login.microsoftonline.com/yourtenant.onmicrosoft.com/oauth2/authorize?resource=https%3A%2F%2Fgraph.microsoft.com
  6. 输入您应用的应用ID /客户端ID作为客户端ID
  7. 将范围和状态留空
  8. 点击请求令牌

如果配置正确,将获得令牌,Postman将为您配置授权标头。 现在有关该授权URL。 确保您指定AAD租户ID或经过验证的域名,而不是yourtenant.onmicrosoft.com。 或者,如果您的应用是多租户,则可以使用commonresource是最重要的参数(且不符合标准)。 它告诉AAD您想要访问令牌的API。 在这种情况下,我为MS Graph API请求了令牌,该令牌的资源URI为https://graph.microsoft.com。 对于自己的API,您可以使用其客户端ID或应用ID URI。

这是我的设置的屏幕截图:

Postman OAuth 2 settings