如何在由 adal-angular 的 httpinterceptor 发送的承载器中添加声明



在angularjs应用程序中,我使用adal和adal-angular库来认证Azure AD上的用户。在后端,我在 webAPI 中使用 OWIN 中间件来添加自定义声明:

app.UseWindowsAzureActiveDirectoryBearerAuthentication(new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Audience = ConfigurationManager.AppSettings["ida:Audience"],
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
Provider = new OAuthBearerAuthenticationProvider()
{
OnValidateIdentity = async context =>
{
if(!context.IsValidated)
return;
var userManager = context.OwinContext.Get<UserManager>();
string email = context.Ticket.Identity.GetClaimValue(System.Security.Claims.ClaimTypes.Email);
User user = userManager.GetByEmail(email);
context.Ticket.Identity.AddClaim(new Claim(ClaimTypes.UserId, user.Id.ToString(CultureInfo.InvariantCulture));
}
}
});

它适用于当前请求,但是如何在 adal-angular 的 httpinterceptor 发送的承载符中添加声明以供下一个请求使用?

要回答您的直接问题:您不能修改访问令牌,句点。 它有一个数字签名,如果您更改令牌中的任何内容,该签名将不再有效。 这是一种防止篡改的安全措施。 OWIN 中间件在启动时从 Azure AD 下载签名密钥对的公钥,并使用这些公钥来验证令牌。

现在,如果您将内部 ID 存储为扩展属性, 实际上,可以告诉 Azure AD 将其包含在令牌中。 不过,此功能为预览版,不建议用于生产:https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-optional-claims#configuring-custom-claims-via-directory-extensions。 在这里,您可以将内部 ID 设置为用户实体的扩展,并将其包含在 API 的访问令牌中。

解决问题的实用解决方案可能是内存中缓存。 电子邮件多久更改一次?

最新更新