在web app中对用户进行身份验证时,向azure功能验证用户

在web app中对用户进行身份验证时,向azure功能验证用户,azure,azure-active-directory,azure-functions,Azure,Azure Active Directory,Azure Functions,我有一个ASP.NET MVC Web应用程序作为Azure应用程序服务中的Web应用程序运行。此web应用程序通过HttpClient从控制器调用Azure函数。使用Azure Active Directory在web应用程序中配置身份验证/授权。我需要在调用Azure函数时对用户进行身份验证,以便我可以访问用户声明。 我还试图在Azure函数本身中配置身份验证,但每当我从web应用程序调用该函数时,都会导致“未经授权的响应”。 是否有办法使web应用程序和Azure功能使用相同的Active

我有一个ASP.NET MVC Web应用程序作为Azure应用程序服务中的Web应用程序运行。此web应用程序通过HttpClient从控制器调用Azure函数。使用Azure Active Directory在web应用程序中配置身份验证/授权。我需要在调用Azure函数时对用户进行身份验证,以便我可以访问用户声明。 我还试图在Azure函数本身中配置身份验证,但每当我从web应用程序调用该函数时,都会导致“未经授权的响应”。
是否有办法使web应用程序和Azure功能使用相同的Active Directory身份验证。因此,当用户通过web应用的身份验证时,他不需要在Azure函数中再次进行身份验证,并且所有用户声明都可以在函数本身中使用?

我可以想出三种不同的方法

使用承载令牌。

创建两个单独的应用程序注册,一个用于web应用程序,另一个用于功能应用程序。为各自的应用程序设置身份验证/授权功能,并将两者配置为需要AAD访问。授予web应用程序的AAD应用程序注册权限以访问功能应用程序的AAD应用程序注册

为了确保web应用程序的访问令牌是可用于联系函数应用程序的JWT,您需要向web应用程序添加其他登录参数。要执行此操作,请按照,但应将
AdditionalLoginParms
设置为
resource=

当用户向web应用发出经过身份验证的请求时,应填充名为
X-MS-TOKEN-AAD-ACCESS-TOKEN
的标题,该标题应是一个访问令牌,具有功能应用程序应用注册的访问者。然后可以将其用作函数应用程序API调用的承载令牌,这应该满足函数应用程序的身份验证/授权要求

代表流量使用

创建两个单独的应用程序注册,一个用于web应用程序,另一个用于功能应用程序。为各自的应用程序设置身份验证/授权功能,并将两者配置为需要AAD访问。授予web应用程序的AAD应用程序注册权限以访问功能应用程序的AAD应用程序注册

然后,遵循,以便web应用程序可以为功能应用程序的经过身份验证的用户获取访问令牌。有几个库可以帮助处理此流。查看您的应用程序注册是AAD V1应用程序,还是AAD V2应用程序

使用客户端定向流(X-ZUMO-AUH)

创建两个单独的应用程序注册,一个用于web应用程序,另一个用于功能应用程序。为各自的应用程序设置身份验证/授权功能,并将两者配置为需要AAD访问。授予web应用程序的AAD应用程序注册权限以访问功能应用程序的AAD应用程序注册

为了确保web应用程序的访问令牌可用于针对功能应用程序进行身份验证,您需要向web应用程序添加其他登录参数。要执行此操作,请按照,但应将
AdditionalLoginParms
设置为
resource=

当用户向web应用发出经过身份验证的请求时,应填充一个名为
X-MS-TOKEN-AAD-ACCESS-TOKEN
的标题,该标题应是一个访问令牌,具有功能应用程序应用程序注册的访问者,以及标题
X-MS-TOKEN-AAD-id-TOKEN
中的id令牌。向https://.azurewebsites.net/.auth/login/aad 有效载荷
{“id\u令牌”:“access\u令牌”:}
。这将返回会话令牌,您可以将其作为
X-ZUMO-AUTH
头附加以验证请求


注意:此选项中的声明将是身份验证令牌的声明,与前两个选项中的声明不同,这些声明不是身份提供者的声明。要获得与其他选项相同的声明,请将应用程序设置
WEBSITE\u AUTH\u ZUMO\u USE\u TOKEN\u STORE\u claims
设置为
true

,非常感谢!如果应用程序本身向功能应用程序发送经过身份验证的请求,我是否有办法直接在功能应用程序中访问用户的“声明”?我没有设法执行任何建议。这两个选项都会导致“未经授权”的响应。对我有效的方法是从web应用程序向“”发出post请求,传递访问令牌(X-MS-token-AAD-ID-token)并获取身份验证令牌。而不是向函数app发出相应的请求并在头x-zumo-auth中传递身份验证令牌。但是,使用这个选项,我无法获得我需要的所有声明。我已经修改了我的答案,它修复了承载令牌示例,并解释了如何让zumo auth令牌场景工作。