【问题标题】:How to add a claim in the bearer send by httpinterceptor of adal-angular如何在 adal-angular 的 httpinterceptor 发送的承载中添加声明
【发布时间】:2018-11-22 00:07:30
【问题描述】:

在 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 发送的承载中添加声明以用于下一个请求?

【问题讨论】:

  • 如果我理解正确的话,这将不起作用,因为令牌是由您信任的身份提供商签署的,您将无法在客户端内更改它?
  • 我只想从客户端发送一个定制的承载,而不是在每个请求上添加声明。我只想在身份验证后的第一个请求中添加声明并将其包含在承载中
  • 我知道,但我认为并希望这是不可能的。 @juunas 你能确认一下吗?
  • 是的,出于安全原因。如果客户能够操纵索赔,我就不能再信任他们了。
  • 同意@MartinBrandl 1000%,你不能这样做(希望也没有人能做到)。这是JWT 所固有的。

标签: angularjs asp.net-web-api azure-active-directory owin adal


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的确认
  • 好的,感谢您的时间和解释。电子邮件永远不会改变。我还有一个 AuthorizationServer 用于简单的登录/密码身份验证。我可以在此授权服务器上重定向 Azure AD 身份验证以使用用户 ID 生成另一个令牌吗?
  • @juunas 你能看看我的回答,告诉我这是否是将身份从 Azure AD 更改为应用程序身份的好方法?感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 2018-07-18
  • 2021-08-12
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多