【发布时间】: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