【发布时间】:2021-02-16 16:35:47
【问题描述】:
我有一个 asp.net core mvc web 应用程序和一个使用 IdentityServer4 保护的 asp.net core api 项目。 当用户登录(到 mvc 应用程序)时,我添加了一个声明(“mycompany”),我希望它可以在 api 项目中访问。
我可以访问mvc项目中的附加声明没问题,但我无法访问api项目中的新声明。
如何使声明(“mycompany”)显示在 api 项目中?
MVC 应用启动.cs
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies").AddOpenIdConnect("oidc", options =>
{
options.Authority = Configuration.GetSection("IdpConfig").GetValue<string>("IdpUri");
options.RequireHttpsMetadata = false;
options.ClientId = "MyProject.Web";
options.ClientSecret = "SomeSecret";
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.Events = new OpenIdConnectEvents
{
OnTicketReceived = async (context) =>
{
try
{
var claimsIdentity = context.Principal.Identity as ClaimsIdentity;
claimsIdentity.AddClaim(new Claim("mycompany", "some company"));
await Task.FromResult(0);
}
catch (Exception ex)
{
// Log This
}
},
OnUserInformationReceived = (context) => Task.FromResult(0),
OnTokenValidated = (context) =>
{
return Task.FromResult(0);
},
OnRedirectToIdentityProvider = (context) => Task.CompletedTask
};
});
在 MVC 应用程序中这有效(返回“某些公司”),但在 api 中声明不存在
public static string GetCompany(this ClaimsPrincipal principal)
{
var company = principal.Claims.FirstOrDefault(c => c.Type == "mycompany");
return company?.Value;
}
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-core asp.net-web-api identityserver4