使用证书的 Azure Active Directory 守护程序客户端
Posted
技术标签:
【中文标题】使用证书的 Azure Active Directory 守护程序客户端【英文标题】:Azure Active Directory Daemon Client Using Certificates 【发布时间】:2016-03-28 16:31:23 【问题描述】:我一直在 GitHub 上查看 Azure Active Directory 的官方 Authenticating to Azure AD in daemon apps with certificates 示例。 Web API 服务似乎对客户端一无所知。
-
您不会被告知登录 Azure 并使用“对其他应用程序的权限”部分为守护程序客户端添加访问 Web API 的权限。
Web API 控制器操作不检查调用者的声明以确保它是客户端应用程序。它确实有这段代码,但我并不完全理解:
我认为在我的 Azure AD 中注册的任何客户端都可以通过此示例的设置方式访问 Web API 是否正确。
【问题讨论】:
【参考方案1】:好问题,这无疑是一种误导。答案是肯定的 - 在 Azure AD 租户中注册的任何 Web 客户端都可以使用代码示例中描述的客户端凭据流获取访问 Web API 的令牌。
如果您不希望这种行为,您有 2 个选择:
-
通过编辑应用程序清单 (see this sample) 为您的 Web API 定义至少一个应用程序角色。你可以定义一些有意义的东西,比如“admin”或者更通用的东西,比如“full_access”。在您的 Web API 代码中,您可以在授权请求之前检查是否存在相应的角色声明。如果您选择此策略,Azure AD 租户管理员将能够使用 Permissions to Other Applications 部分向各个客户端授予访问权限,如您所料。
另一种策略是简单地根据某种 ACL 或白名单检查传入令牌的声明。一种常见的做法是检查特定知名客户端 ID 的 appid 声明。
示例代码确实具有误导性,因为它使用了 scope 声明。 API 被编写为与代表用户(委托令牌)和使用应用程序的身份(客户端凭据)访问 API 的客户端一起使用。这就是您在其中看到范围声明的原因。
在运行时,您引用的验证逻辑会发现 scopeClaim == null
。然后,它将使用 ClaimTypes.NameIdentifier
声明(也称为 sub
声明)来识别客户端应用程序以及属于该特定应用程序的 POST 或 GET 待办事项。
此示例不限制 Azure AD 租户中的哪些客户端可以访问 Web API。
希望这会有所帮助。
【讨论】:
以上是关于使用证书的 Azure Active Directory 守护程序客户端的主要内容,如果未能解决你的问题,请参考以下文章
使用 Azure Active Directory 或 ADFS 或 AD 的 SSO
使用 Azure Active Directory 时 SonarLint 身份验证不起作用
使用 azure-cli 访问 Azure Active Directory 的令牌
用于查询Azure Active Directory的Azure服务
使用Laravel的Azure Active Directory SSO
[Azure - Security] Azure的多重身份验证:使用AD(Azure Active Directory)开启用户MFA