我目前正在开发一个Kiosk终端,我需要使用Azure AD为使用asp.net核心构建的REST API授予对UWP应用程序的访问权限。由于没有用户,因为它是自助服务终端设置,我创建了一个Azure AD应用程序注册(Web应用程序),还创建了一个用作客户端密钥的密钥。
我设法使用POST https://login.microsoftonline.com/{myTenant}/oauth2/token
提供ClientId
,ClientSecret
和所需资源(=我的应用注册的AppId)的POST请求获得持有者访问令牌。
在我的asp.net core
应用中,我确实启用了JWTBearerAuthentication,如下所示:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
Authority = Configuration["ClientAuthentication:AADInstance"] + Configuration["ClientAuthentication:TenantId"],
Audience = Configuration["ClientAuthentication:Audience"]
});
我在API控制器中使用Authorize属性。
在此设置中,我总是得到一个
401未经授权
在Authorization标头中使用Bearer令牌调用此API时。
有什么想法吗?
答案 0 :(得分:1)
代码示例仅用于检查代码问题,因为我无法重现此问题。
这是我的尝试:
从Azure经典门户网站注册应用
使用客户端凭据流获取令牌,如下所示:
//7f39bae4-f852-41ae-8a7b-54d022cf65bd is the client_id of app
POST:https://login.microsoftonline.com/{tenantId}/oauth2/token
grant_type=client_credentials&client_id=7f39bae4-f852-41ae-8a7b-54d022cf65bd&client_secret={clientSecret}&resource=7f39bae4-f852-41ae-8a7b-54d022cf65bd
Startup
类修改为您提供的代码
app.UseJwtBearerAuthentication(new JwtBearerOptions {
Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAD:Tenant"]),
Audience = "7f39bae4-f852-41ae-8a7b-54d022cf65bd"
});
Get
TodoListController
方法的断点
GET:https://localhost:44321/api/TodoList
Authorization: bearer {accessToken}
破发点对我来说很好。请确保受众群体是您应用的客户ID 。如果您仍有问题,我建议您按照上述步骤检查是否有帮助。