c# – 使用带有Client Secret的Azure AD对asp.net核心后端进行身份验证

我目前正在开发一个Kiosk终端,我需要使用Azure AD为使用asp.net核心构建的REST API授予UWP应用程序的访问权限.由于没有用户,因为它是一个自助服务终端设置,我创建了一个Azure AD应用程序注册(Web应用程序),并创建了一个用作客户端密钥的密钥.

我设法使用POST请求获取持有者访问令牌https://login.microsoftonline.com/{myTenant}/oauth2/token,提供ClientId,ClientSecret和所需资源(=我的应用注册的AppId).

在我的asp.net核心应用程序中,我确实启用了JWTBearerAuthentication,如下所示:

app.UseJwtBearerAuthentication(new JwtBearerOptions
{
    Authority = Configuration["ClientAuthentication:AADInstance"] + Configuration["ClientAuthentication:TenantId"],
    Audience = Configuration["ClientAuthentication:Audience"]
});

我在API控制器中使用Authorize属性.

在这个设置中我总是得到一个

401 unauthorized

在Authorization标头中使用Bearer令牌调用此API时.

有任何想法吗?

最佳答案 代码示例仅用于检查代码问题,因为我无法重现此问题.

这是我的尝试:

>从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

>克隆here的代码示例
>将Startup类修改为您提供的代码

 app.UseJwtBearerAuthentication(new JwtBearerOptions {
            Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAD:Tenant"]),
            Audience = "7f39bae4-f852-41ae-8a7b-54d022cf65bd"
        });

>运行ToDoListService项目
>设置TodoListController的Get方法的断点
>使用Fiddler发送请求,如下所示

GET:https://localhost:44321/api/TodoList
Authorization: bearer {accessToken}

破发点对我来说很好.请确保观众是您应用的客户ID.如果您仍有问题,我建议您按照上述步骤检查是否有帮助.

点赞