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

时间:2017-02-10 10:30:01

标签: c# asp.net azure asp.net-core azure-active-directory

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

我设法使用POST https://login.microsoftonline.com/{myTenant}/oauth2/token提供ClientIdClientSecret和所需资源(=我的应用注册的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时。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

代码示例仅用于检查代码问题,因为我无法重现此问题。

这是我的尝试:

  1. 从Azure经典门户网站注册应用

  2. 使用客户端凭据流获取令牌,如下所示:

  3. //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
    
    1. 克隆here
    2. 中的代码示例
    3. Startup类修改为您提供的代码
    4.  app.UseJwtBearerAuthentication(new JwtBearerOptions {
                  Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAD:Tenant"]),
                  Audience = "7f39bae4-f852-41ae-8a7b-54d022cf65bd"
              });
      
      1. 运行 ToDoListService 项目
      2. 设置Get
      3. TodoListController方法的断点
      4. 使用Fiddler发送请求,如下所示
      5. GET:https://localhost:44321/api/TodoList
        Authorization: bearer {accessToken}
        

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