ASP.NET 索赔政策未授权
ASP.NET claim policy not authorizing
我已经设置了一个基本的 TestAdmin 帐户以在微服务应用程序中使用基于声明的身份验证。我把相关代码设置如下:
await userManager.AddClaimAsync(testAdmin, new Claim(ClaimTypes.Role, "NavInvoices"));
这显示在 AspNetUserClaims 数据库中,因此正在创建和保存。
我尝试了这两种方法来设置策略(我只检查现在是否存在 ClaimTypes.Role):
services.AddAuthorization(options =>
{
options.AddPolicy("NavInvoices2", policy => policy.RequireClaim(ClaimTypes.Role));
});
services.AddAuthorization(options =>
{
options.AddPolicy("NavInvoices", policy =>
policy.RequireAssertion(context =>
context.User.HasClaim(c =>
(c.Type == ClaimTypes.Role))));
});
这是控制器:
[Authorize(Policy = "NavInvoices")]
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
问题是当我遍历 user.claims 时没有任何作用。只有电子邮件、姓名等。在 SqlDB 中,只有我创建的角色存在。 None 这些其他存在的东西,如姓名和电子邮件,都在数据库中。所以某处存在断开连接。我正在使用 IdentityServer4 的 Quickstart EFandAspNetIdentity 模板作为我的基础(如果有人熟悉的话)。
我已经用谷歌搜索了一切,但到目前为止我找不到任何东西。我认为有两个独立的存储正在进行,cookie 只将其中一个传递给 webmvc 项目。有什么建议吗?
确保在将身份令牌传递给客户时将声明包含在身份令牌中。
客户端配置应包含以下几行:-
new Client
{
ClientId = "yourclient",
ClientName = "Your Client",
// left out for brevity
AlwaysSendClientClaims = true,
AlwaysIncludeUserClaimsInIdToken = true
}
这应该允许所有用户声明通过。
您可以查看我之前回答的这个问题以获取更多信息,并查看我的存储库中的示例:-
我已经设置了一个基本的 TestAdmin 帐户以在微服务应用程序中使用基于声明的身份验证。我把相关代码设置如下:
await userManager.AddClaimAsync(testAdmin, new Claim(ClaimTypes.Role, "NavInvoices"));
这显示在 AspNetUserClaims 数据库中,因此正在创建和保存。 我尝试了这两种方法来设置策略(我只检查现在是否存在 ClaimTypes.Role):
services.AddAuthorization(options =>
{
options.AddPolicy("NavInvoices2", policy => policy.RequireClaim(ClaimTypes.Role));
});
services.AddAuthorization(options =>
{
options.AddPolicy("NavInvoices", policy =>
policy.RequireAssertion(context =>
context.User.HasClaim(c =>
(c.Type == ClaimTypes.Role))));
});
这是控制器:
[Authorize(Policy = "NavInvoices")]
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
问题是当我遍历 user.claims 时没有任何作用。只有电子邮件、姓名等。在 SqlDB 中,只有我创建的角色存在。 None 这些其他存在的东西,如姓名和电子邮件,都在数据库中。所以某处存在断开连接。我正在使用 IdentityServer4 的 Quickstart EFandAspNetIdentity 模板作为我的基础(如果有人熟悉的话)。
我已经用谷歌搜索了一切,但到目前为止我找不到任何东西。我认为有两个独立的存储正在进行,cookie 只将其中一个传递给 webmvc 项目。有什么建议吗?
确保在将身份令牌传递给客户时将声明包含在身份令牌中。
客户端配置应包含以下几行:-
new Client
{
ClientId = "yourclient",
ClientName = "Your Client",
// left out for brevity
AlwaysSendClientClaims = true,
AlwaysIncludeUserClaimsInIdToken = true
}
这应该允许所有用户声明通过。
您可以查看我之前回答的这个问题以获取更多信息,并查看我的存储库中的示例:-