微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Identity Server获取Azure Function中的用户信息和其他声明

如何解决使用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的用户信息端点来获取用户信息和其他声明,则需要这样做。

  1. 将索赔信息添加到授权令牌中
  2. 解析授权令牌并提取用户信息和其他声明信息。

此方法的缺点是令牌大小增加了,但是优点是您不需要击中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 举报,一经查实,本站将立刻删除。