我正在使用React创建一个PWA,并使用Auth0作为身份提供者,使用JWT承载令牌作为身份验证。我将角色注入到我的JWT令牌中,这样客户端就可以限制用户可以使用的选项,我的工作非常好。
我现在想限制服务器端,这样就不能调用终结点,除非用户具有访问该终结点所需的必要角色。
令人烦恼的是,Auth0似乎不支持添加角色
或角色
声称aspnet核心似乎可以处理OOTB;它要求域在声明定义中的角色之前。ie,https://bob.com/roles
作为索赔。
我试图找出如何获得授权(角色=管理员)属性来尊重角色的域前缀声明。
我已尝试更新Auth0规则以设置角色
或角色
属性,但这些属性从未返回;似乎只有域前置角色声明返回。
我找到了更多特定身份验证提供商的其他信息,其中包括AddAuthentication
扩展中的MapJsonKey
扩展,看起来它们符合要求,但是AddAuthentication
扩展中的标准AuthenticationOptions
对象似乎没有此功能。
应用程序中的我的配置服务。反恐精英
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
// 1. Add Authentication Services
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.Authority = Configuration["Auth0:Authority"];
options.Audience = Configuration["Auth0:ClientId"];
});
// In production, the React files will be served from this directory
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/build";
});
}
我在Auth0中将角色注入JWT的规则:
function (user, context, callback) {
const namespace = 'http://bob.com';
const assignedRoles = (context.authorization || {}).roles;
let idTokenClaims = context.idToken || {};
let accessTokenClaims = context.accessToken || {};
idTokenClaims[`roles`] = assignedRoles; // This was an attempt to set the roles in 'roles' but doesn't get returned.
accessTokenClaims[`roles`] = assignedRoles;
idTokenClaims[`${namespace}/roles`] = assignedRoles; // This does get returned
accessTokenClaims[`${namespace}/roles`] = assignedRoles;
context.idToken = idTokenClaims;
context.accessToken = accessTokenClaims;
callback(null, user, context);
}
JWT有效载荷示例
{
"http://bob.com/roles": [
"Administrator"
],
"given_name": "Name",
"iss": "{issuer}",
"sub": "{subject}",
"aud": "{audience}"
}
asp。net核心操作(取自示例项目,但添加了auth)
[HttpGet("[action]"), Authorize(Roles = "Administrator")]
public IEnumerable<WeatherForecast> WeatherForecasts()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
DateFormatted = DateTime.Now.AddDays(index).ToString("d"),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
});
}
我希望能够映射http://bob.com/roles
到角色
,获取aspnet coreAuthorize
属性以查看http://bob.com/roles
,或获取Auth0以能够返回“角色”对象中的角色。
我从哪里得到的MapJsonKey
信息:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/additional-claims?view=aspnetcore-2.2
将角色与ASP。NET核心JWT中间件https://www.jerriepelser.com/blog/using-roles-with-the-jwt-middleware/
对于任何发现这一点的人,我都找到了解决办法。如果您将JWT声明更新为http://schemas.microsoft.com/ws/2008/06/identity/claims/role
然后,所有这些都会立即生效。
更新了Auth0规则
function (user, context, callback) {
const assignedRoles = (context.authorization || {}).roles;
let idTokenClaims = context.idToken || {};
let accessTokenClaims = context.accessToken || {};
idTokenClaims[`http://schemas.microsoft.com/ws/2008/06/identity/claims/role`] = assignedRoles;
accessTokenClaims[`http://schemas.microsoft.com/ws/2008/06/identity/claims/role`] = assignedRoles;
context.idToken = idTokenClaims;
context.accessToken = accessTokenClaims;
callback(null, user, context);
}
我有3个用户角色:管理员、客户和员工。 登录后,每个角色将重定向到特定的仪表板,例如:-管理员:网站。com/admin-客户:网站。com/客户-员工:网站。通讯员/雇员 此时,无论我使用哪个用户角色,都可以通过这些网址访问所有内容。 限制客户打开admin的最简单方法是什么 Laravel版本5.2.45 PHP版本7.2我正在使用共享托管提供商。谢谢你们
我已经创建了自定义中间件类来验证JWT令牌。我在
我试图将对Swagger用户界面(UI)的访问限制为特定角色(例如,Swagger API用户、系统管理员用户等) 我在这个SO问题中尝试了答案--限制对Swagger UI的访问 我想我在等401的未经授权的回复。我对昂首阔步是完全陌生的,所以任何建议都很感激!
我正在尝试限制kubernetes仪表板上的a用户,该仪表板在我创建后连接到kubectl。他和相应的配置的crt。 我成功地限制了他可以使用以下role.yaml 和簇绑定 让他能够进入仪表板。问题是,我只希望他能够访问名称空间。 我已经搜索了一些,一些解决方案似乎涉及创建一个服务帐户,另一个问题可能是因为查看仪表板的权限是在集群角色上授予的,并且无法命名。 有没有最好的方法来解决这个问题?
问题内容: 我需要制作一个只能由具有特定角色的人执行的命令。我在google和youtube上搜索以找到答案,但一无所获 问题答案: 您可以在命令上添加装饰器,以将其限制为仅具有特定角色或权限的成员。它的文档在这里。它看起来像这样: 请记住,您传递的字符串区分大小写。
在我的第一个nodejs应用程序中实现授权时,我遇到了一个问题,该应用程序使用expressjs、sequelize和jsonwebtoken进行身份验证。在内部,我想禁止/允许不同用户的路由,我不想使用另一个包,如oauth2或为我处理授权的东西。 目前,我已经创建了一个jsonwebtoken,它的有效负载中包含权限角色: 否我想在“GET/user”这样的调用中检查是否允许经过身份验证的用户