如何解决使用Identity Server获取Azure Function中的用户信息和其他声明
我有一个应用程序,其中使用IdentityServer4和Azure AD作为OpenID提供程序来完成身份验证。 IdentityServer4托管在Azure App服务中。成功通过身份验证后,我可以在Angular应用程序中获取访问令牌。访问令牌被传递到基于.Net Core的RESTful API,该API托管在 Azure Function 3.x 中。 在我的Azure函数中,我希望获得用户信息和其他声明,而不会碰到IdentityServer4的端点“ / connect / userinfo”。
类似于以下获取索赔的操作会有所帮助
[FunctionName("MyFunctionName")]
public static HttpResponseMessage Run(
[HttpTrigger(
AuthorizationLevel.Anonymous,"get","post",Route = "MyFunctionName")]HttpRequestMessage req,ILogger log,ClaimsPrincipal claimsPrincipal)
{
// My function code here...
}
我如何在Azure函数中通过IdentityServer4使用Azure AD作为OpenID提供程序进行身份验证来获取用户信息和其他声明
解决方法
如果您具有有效的访问令牌,则可以自行向UserInfo终结点发出请求,以检索剩余的用户详细信息。
详细了解here
如果您不想访问userinfo端点,唯一的选择是直接在令牌中包括所需的数据。在这里,您需要在令牌大小与便利性之间进行权衡。然后,您将获得一个真正的无状态系统。
,如果您不想访问Identity Server的用户信息端点来获取用户信息和其他声明,则需要这样做。
- 将索赔信息添加到授权令牌中
- 解析授权令牌并提取用户信息和其他声明信息。
此方法的缺点是令牌大小增加了,但是优点是您不需要击中userinfo端点即可保存您的http请求。因此,每种方法之间都需要权衡。
在这里,您可以在Identity Server中配置api时添加声明信息。通常,如果您使用过Identity Server模板,则此信息位于Config.cs中。
public static IEnumerable<ApiResource> GetApis()
{
var apiResourceList = new List<ApiResource>
{
new ApiResource(IdentityServerConstants.LocalApi.ScopeName)
{
UserClaims =
{
JwtClaimTypes.Email,JwtClaimTypes.PhoneNumber,JwtClaimTypes.GivenName,JwtClaimTypes.FamilyName,JwtClaimTypes.PreferredUserName
},}
};
return apiResourceList;
}
要解析和验证令牌,请关注博客Manual token validation in Azure Function
此StackOverflow thread也非常有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。