使用身份服务器在 Azure Function 中获取用户信息和其他声明
Get user info and other claims in Azure Function with Identity server
我有一个应用程序,其中身份验证是使用 IdentityServer4 和 Azure AD 作为 OpenID 提供程序来完成的。 IdentityServer4 托管在 Azure App 服务中。身份验证成功后,我可以在 Angular 应用程序中获取访问令牌。访问令牌传递给基于 RESTful API 的 .Net Core,它托管在 Azure 函数 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 端点,唯一的选择是直接在令牌中包含所需的数据。在这里,您需要在令牌大小与便利性之间做一个 trade-of。然后你得到一个真正的无状态系统。
如果您不想点击 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
这个也很有用
我有一个应用程序,其中身份验证是使用 IdentityServer4 和 Azure AD 作为 OpenID 提供程序来完成的。 IdentityServer4 托管在 Azure App 服务中。身份验证成功后,我可以在 Angular 应用程序中获取访问令牌。访问令牌传递给基于 RESTful API 的 .Net Core,它托管在 Azure 函数 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 端点,唯一的选择是直接在令牌中包含所需的数据。在这里,您需要在令牌大小与便利性之间做一个 trade-of。然后你得到一个真正的无状态系统。
如果您不想点击 Identity Server 的用户信息端点来获取用户信息和其他声明,则需要执行以下操作。
- 将声明信息添加到授权令牌
- 解析授权令牌并提取用户信息和其他声明信息。
这种方法的缺点是令牌大小增加了,但优点是您不需要点击 userinfo 端点来保存您的 http 请求。因此,每种方法都需要权衡取舍。
以下是在 Identity Server 中配置 api 时如何添加声明信息。如果您使用了 Identity Server 模板
,此信息通常位于 Config.cspublic 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
这个