我有一个ASP.NET MVC Web应用程序在Azure App Service中作为Web应用程序运行。该Web应用程序通过Controller从HttpClient调用Azure函数。在Web应用程序中使用Azure Active Directory配置身份验证/授权。调用Azure函数时,我还需要对用户进行身份验证,以便可以访问用户的Claims。 我还尝试在Azure函数本身中配置身份验证,但是每当我从Web应用程序调用函数时,都会导致“未经授权的响应”。 是否可以使Web应用程序和Azure功能使用相同的Active Directory身份验证。这样,当用户通过Web应用程序进行身份验证时,他不需要在Azure功能中再次进行身份验证,并且所有用户声明都可以在该功能本身中使用?
答案 0 :(得分:0)
我可以想到三种可行的方法。
使用不记名令牌。
创建两个单独的应用程序注册,一个用于Web应用程序,一个用于功能应用程序。为相应的应用程序设置“身份验证/授权”功能,同时将两者都配置为要求AAD访问。授予Web应用程序的AAD应用程序注册权限,以访问功能应用程序的AAD应用程序注册。
要确保Web应用程序的访问令牌是可用于联系功能应用程序的JWT,您需要向Web应用程序添加其他登录参数。为此,请遵循instructions here,但应将additionalLoginParams
设置为resource=<your-function-app-registration-client-id>
。
当用户向Web应用程序发出经过身份验证的请求时,应填充一个名为X-MS-TOKEN-AAD-ACCESS-TOKEN
的标头,该标头应该是具有您的Function应用程序的应用程序注册对象的访问令牌。然后可以将其用作功能应用程序API调用的承载令牌,该令牌应满足功能应用程序的身份验证/授权要求。
使用代表流量
创建两个单独的应用程序注册,一个用于Web应用程序,一个用于功能应用程序。为相应的应用程序设置“身份验证/授权”功能,同时将两者都配置为要求AAD访问。授予Web应用程序的AAD应用程序注册权限,以访问功能应用程序的AAD应用程序注册。
然后,遵循on-behalf-of flow,以便Web应用程序可以获取功能应用程序的已认证用户的访问令牌。有几个库可以帮助实现这一流程。如果您的应用程序注册是AAD V1应用程序,请参见ADAL;如果您的应用程序注册是AAD V2应用程序,请参见MSAL。
使用客户端定向流(X-ZUMO-AUTH)
创建两个单独的应用程序注册,一个用于Web应用程序,一个用于功能应用程序。为相应的应用程序设置“身份验证/授权”功能,同时将两者都配置为要求AAD访问。授予Web应用程序的AAD应用程序注册权限,以访问功能应用程序的AAD应用程序注册。
为确保可将Web应用程序的访问令牌用于对功能应用程序进行身份验证,您需要向Web应用程序添加其他登录参数。为此,请遵循instructions here,但应将additionalLoginParams
设置为resource=<your-function-app-registration-client-id>
。
当用户向Web应用程序发出经过身份验证的请求时,应填充一个名为X-MS-TOKEN-AAD-ACCESS-TOKEN
的标头,该标头应是具有您的Function应用程序的应用程序注册对象的访问令牌,以及标头中的id令牌X-MS-TOKEN-AAD-ID-TOKEN
。使用有效负载向https://.azurewebsites.net/.auth/login/aad发出POST请求
{"id_token": <id-token>, "access_token": <access-token>}
。这将返回一个会话令牌,您可以将其作为X-ZUMO-AUTH
标头附加以验证请求。
注意:此选项中的声明将是身份验证令牌的声明,而不是像前两个选项中那样的身份提供者的声明。要获得与其他选项相同的声明,请将应用程序设置WEBSITE_AUTH_ZUMO_USE_TOKEN_STORE_CLAIMS
设置为true
。