gpt4 book ai didi

spring - 如何在 spring-rest-oauth 中基于 oauth 范围限制方法访问?

转载 作者:行者123 更新时间:2023-12-02 14:14:24 24 4
gpt4 key购买 nike

如何根据范围限制对方法的访问?例如,在下面的curl中,我得到的访问 token 仅具有“读取”范围。也就是说,用户已授权客户端应用程序对资源具有只读访问权限


curl -X POST -vu clientapp:12334 http://localhost:9001/oauth/token -H“接受:application/json”-d“密码=spring&username=roy&grant_type=password&scope=read”

但请注意,客户端已向身份验证服务器注册了两个范围 - 读取和写入

现在,假设资源服务器有两个端点

/users/update - 此端点是 POST 请求。仅当“写入”范围得到用户批准时才应公开。

users/getInfo - 此端点是 GET 请求。这应该被公开,因为用户已授予具有读取范围的客户端访问权限

我的问题是我们如何在方法级别控制这些访问

@RestController
@RequestMapping("/users")
public class UserController {

private static final String template = "Hello, %s!";

private final AtomicLong counter = new AtomicLong();

@RequestMapping("/update", method = RequestMethod.POST)
public UserProfile update(@AuthenticationPrincipal User user) {

///update userProfile
return userProfile;
}

@RequestMapping("/getInfo", method = RequestMethod.GET)
public UserProfile getProfile(@AuthenticationPrincipal User user) {

//get the userData from database
return userProfile;
}
}

是否可以用范围注释方法:例如

  @scope("read")
@RequestMapping("/getInfo", method = RequestMethod.GET)
public UserProfile getProfile(@AuthenticationPrincipal User user) {

//get the userData from database
return userProfile;
}
}

最佳答案

Spring Security OAuth 有自己的表达方式,例如#oauth2.clientHasRole、#oauth2.clientHasAnyRole、#oauth2.hasScope

@PreAuthorize("#oauth2.hasScope('write')")
public void create(Contact contact);

引用:

http://projects.spring.io/spring-security-oauth/docs/oauth2.html

http://docs.spring.io/spring-security/oauth/apidocs/org/springframework/security/oauth2/provider/expression/OAuth2SecurityExpressionMethods.html

http://docs.spring.io/spring-security/site/docs/3.2.5.RELEASE/reference/htmlsingle/#el-access

关于spring - 如何在 spring-rest-oauth 中基于 oauth 范围限制方法访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32279772/

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