我有一个.NET Web API和一个使用ADAL.js的小型Vanilla-JS应用,并且设法使它们彼此之间很好地交谈并正确进行了身份验证。
如果我console.log
从adalAuthContext.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)
})
答案 0 :(得分:1)
因此,由于Azure AD v1终结点不完全符合标准,因此我们必须以一种有点怪异的方式来做事情。
在邮递员中:
https://login.microsoftonline.com/yourtenant.onmicrosoft.com/oauth2/authorize?resource=https%3A%2F%2Fgraph.microsoft.com
如果配置正确,将获得令牌,Postman将为您配置授权标头。
现在有关该授权URL。
确保您指定AAD租户ID或经过验证的域名,而不是yourtenant.onmicrosoft.com
。
或者,如果您的应用是多租户,则可以使用common
。
resource
是最重要的参数(且不符合标准)。
它告诉AAD您想要访问令牌的API。
在这种情况下,我为MS Graph API请求了令牌,该令牌的资源URI为https://graph.microsoft.com
。
对于自己的API,您可以使用其客户端ID或应用ID URI。
这是我的设置的屏幕截图: