Azure AD OAuth Client Credentials Grant flow



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

  1. 验证令牌的最佳方法是什么?是通过JWT通过吗 (持有者令牌)作为我的 API 的 HTTP 标头,然后使用 SDK 到 验证令牌 (System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler)?我正在使用 C#。
  2. Azure AD 的意义是什么 ->应用注册 ->"我的 API 应用" -> 在"管理"、"公开 API?它有一个选项 "授权客户端应用程序"。如何使用此功能 有条件地阻止和批准客户端应用程序?

  3. 我必须与第三方共享机密、客户端 ID 和应用程序 ID Uri,以便他们生成令牌,并在收到令牌时对其进行验证。

你走在正确的轨道上。

此答案(使用 Web API 授权属性角色的 Azure AD OAuth 客户端凭据授予流)将引导你完成一种方法来执行此操作,即使用令牌中的roles声明来授权调用。

您将需要:

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

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

[Authorize(Roles = "Reader,Requester,Editor,Approver,Administrator")]
  1. 令牌验证

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

请阅读 MS 的令牌验证指南,其中解释了关键点 - Microsoft身份平台访问令牌

  1. 服务注册

这是注册有效令牌应收终结点的位置(例如:- 你的 api 应用)。如果检查令牌请求,则提供必须与注册标识符匹配的资源参数。这允许 Azure 验证令牌请求,并向上述资源颁发访问令牌。您发现这是令牌中的aud声明。希望你现在得到连接。

  1. 应用机密

否,只有令牌获取方需要客户端凭据。您的 API 或任何令牌使用方都不需要密钥。它们只需要有效的访问令牌和令牌签名证书详细信息。证书详细信息在OpenID 配置终结点中的jwks_uri公开。

最新更新