gpt4 book ai didi

spring-security - spring security/Auth0 授权添加 'ROLE'

转载 作者:行者123 更新时间:2023-12-01 11:18:55 25 4
gpt4 key购买 nike

在我的 Spring Boot 应用程序中,我正在使用 Auth0 来管理对我的 rest api 的访问。
除了Auth0的scope我想为每个用户添加一个角色,这反过来将提供一个额外的访问控制层,低特权用户将无法访问特定的 API。

我一直在阅读有关自定义规则和授权扩展的信息,但不太明白对我来说什么是正确的实现。

这是我的 WebSecurityConfigurerAdapter代码片段:
所以基本上我只希望“管理员”能够访问 /test/**

@Override
protected void configure(HttpSecurity http) throws Exception {
JwtWebSecurityConfigurer
.forRS256(configBean.getAuth0ApiAudience(), configBean.getAuth0Issuer())
.configure(http)
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/test/**").hasAuthority("read:test")
.anyRequest().authenticated();
}

任何帮助将非常感激!

最佳答案

你在这里有几个选择(至少......)。

1)。您可以想象使用规则来处理将“角色”分配给给定用户的决策逻辑 - 而不是将其标记到 scope (你也可以这样做..),你可以决定它们属于 custom claim在那个访问 token 上。规则主体可能包含类似的内容

// lookup the permissions for given user somehow (secured webhook, static map etc) - here lets imagine we want ROLE_USER assigned

context.accessToken.scope = "ROLE_USER"
// or
context.accessToken['https://mydomain/roles'] = "ROLE_USER"

2)。只需使用这样一个事实,即您在发送到 API 的 Auth0 的 JWT 访问 token 中拥有可用的 auth0 用户 ID - 您可以使用这些知识来查找 Auth0 的“带外”使用的更细粒度的权限(使用您的自己的数据库存储,用于以用户 ID 等为键的权限或在访问 token 上标记的其他一些客户声明 - 或者使用 auth0 如果例如您将 ROLE 信息标记为 Auth0 用户配置文件的元数据。然后您可以执行 Auth0 用户配置文件查找(management api) 按用户 id 并以这种方式获取详细信息。如果您喜欢这种方法,请参阅 example here 以获取有关从 JWT 访问 token 获取 userId 声明的 Java 中的说明。

3)。看看 Auth0 authorization extension它通过组、角色和权限为用户授权提供支持。您可以在登录过程中定义预期行为,并且您的配置设置将在运行时执行的规则中捕获。

这里没有一成不变的答案,以上每一项都值得考虑,以及您的项目需要什么。如果您真的想根据上面的代码利用现有的声明性授权,则选择选项 1,并将 ROLES 信息与 scope Hook 。是最简单的方法。

但是,我实际上会提倡选项 2)。在我之上,对于大多数“务实”的中小型企业。在这里,您需要在 Controller 端点中添加一些编程代码来查找 ROLES,然后以这种方式做出安全决策。您还可以将查找代码推送到在到达 Controller 代码之前执行的通用自定义过滤器,并以这种方式执行必要的 Spring Security 操作 - 更多高级开发人员选项 - (我过去曾编写过支持此功能的库Spring Boot/Security 的方法 - 因此可以保证它是一种合理的方法。请参阅 here for demonstration 但同样,您肯定更愿意继续构建业务逻辑而不是绕道构建库,对吗?)。

选项 3)。如果您正在构建一个严肃的企业应用程序,并且需要所有集成,那么绝对值得探索 - 特别是在与企业连接(如 Active Directory)集成的情况下。

如果您仍然感到困惑,请留下评论,但希望以上内容提供了足够的见解以进一步探索。

快速更新

继我们的讨论之后,这里有一条小规则,可以让您了解您所询问的想法:
function addRoleScopesToAccessToken(user, context, callback) {
console.log("add-role-scopes-to-access-token rule");
user.app_metadata = user.app_metadata || {};
var roles = user.app_metadata.roles;
if (roles && roles.length > 0) {
context.accessToken.scope = roles.join(' ');
}
callback(null, user, context);
}

这就是您的“app_metadata”的样子:
{
"roles": [
"role1",
"role2"
]
}

你应该得到一个 JWT 访问 token ,其中的角色添加到 scope .例如。

enter image description here

关于spring-security - spring security/Auth0 授权添加 'ROLE',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46658913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com