Azure AD的无头身份验证(用户/密码组合)

时间:2016-01-31 14:06:40

标签: asp.net azure authentication asp.net-web-api adal

我遵循Microsoft here提供的指南和示例,我可以让演示工作,在控制台应用中进行身份验证,然后向Web发出请求具有正确令牌的API。

我希望使用此功能,但控制台应用中的代码需要转移到Web App。实质上:外部服务器尝试访问安全Web API,在HTTPS请求的Authentication标头中提供Azure AD用户名/密码。我在第一个不安全的Web API中获取这些凭据,并尝试针对AD验证凭据,获取令牌。从这里开始,我将通过使用AD令牌发出请求来调用[Authorize] - 受保护的Web API。

此时我使用上面链接的示例中的相同代码,只需将Console应用程序中的代码移动到第一个不安全的Web API控制器中,但我没有运气。我在CloudIdentity上读到"您只能使用来自本机客户端的那些流。机密客户端(例如网站)不能使用直接用户凭证。"。这是真的?如果是这样,有没有其他方法来实现我的目标?我需要使用凭据,因为将来可能会有更多服务使用该API,因此每个服务都需要使用自己的凭据才能在Azure中进行管理。

编辑:在阅读更多内容时,我是否真的应该使用客户端身份验证,创建一个"应用程序"在Azure AD中,并为每个寻求调用API的外部服务提供客户端ID,然后使用该身份验证,而不是凭据进行身份验证?

1 个答案:

答案 0 :(得分:1)

是的,您的编辑是正确的。 Resource Owner Password Credentials grant用于验证用户,而不是应用程序。典型用途是来自提示您输入用户名和密码然后从Azure AD检索令牌的应用程序。

您可以使用Client Credentials grant从机密客户端从Azure AD获取令牌,以在没有用户上下文的情况下调用API。此流程要求您在Azure AD中注册应用程序并生成密钥(将用作客户端密钥)。然后,您可以使用ADAL库来显示来自AAD的令牌,如here所示。