Azure AD OAuth客户端凭据授予流程

时间:2019-07-24 19:46:53

标签: azure oauth-2.0 azure-active-directory

尝试为我的Web api设置Azure AD OAuth客户端凭据授予流程。我正在关注https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-oauth2-client-creds-grant-flow中的文档。我必须向第三方公开我的API。我已经在Azure AD中创建了APP(这是针对请求我的API的客户端的),生成了机密,并且能够从oauth2 / token终结点获得响应。我的问题如下:

  1. 验证令牌的最佳方法是什么?是通过JWT吗     (承载者令牌)作为我的API的HTTP标头,然后使用SDK来     验证令牌     (System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler)吗?我在用着     C#。
  2. Azure AD的意义-> App Registrations->“我的     API应用”->“管理”下的“公开API?”,它具有以下选项:     “授权客户端应用程序”。我如何使用此功能     有条件地阻止和批准客户端应用程序吗?

  3. 我将必须与第三方共享机密,客户端ID和App ID Uri,以使他们生成令牌,并且在收到令牌时将对其进行验证。

2 个答案:

答案 0 :(得分:1)

您在正确的轨道上。

此答案Azure AD OAuth client credentials grant flow with Web API AuthorizeAttribute Roles将引导您完成一种方法,使用令牌中的roles声明来授权呼叫。

您将需要:

  • 定义角色
  • 为每个第三方
  • 创建一个应用注册
  • 将他们的应用分配给您想要的角色

然后您可以使用AuthorizeAttribute来映射哪些角色可以执行哪些控制器/操作,如下所示:

[Authorize(Roles = "Reader,Requester,Editor,Approver,Administrator")]

答案 1 :(得分:0)

  1. 令牌验证

完成令牌获取流程后,您将收到JWT承载访问令牌。从令牌消费端(您的服务)开始,您需要执行JWT验证。这是通过验证JWT签名和声明来完成的。您验证的最重要的声明之一是受众声明( aud ),该声明必须是令牌接收服务唯一的标识符(例如:您的服务的URL,ID) 。您在哪里注册?这是您的第二个问题。

请通读MS令牌验证指南,该指南解释了要点-Microsoft identity platform access tokens

  1. 服务注册

在这里注册有效的令牌应收端点(例如:-您的api应用)。如果您检查令牌请求,则提供的 resource 参数必须与注册的标识符匹配。这样,Azure可以验证令牌请求,并为所提到的资源颁发访问令牌。您可以在令牌中将其作为 aud 声明。希望您现在已建立连接。

  1. 应用秘密

否,仅令牌获取方需要客户端凭据。您的API或任何令牌使用方都不需要密码。它们仅需要有效的访问令牌和令牌签名证书详细信息。证书详细信息在 openem-configuration 端点的 jwks_uri 中公开。