spring-oauth-server实践(2-1)问题澄清-关于资源角色和scope

Posted 非淡泊无以明志,非宁静无以致远 - 长安快马

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-oauth-server实践(2-1)问题澄清-关于资源角色和scope相关的知识,希望对你有一定的参考价值。

oauth_client_details -----resource_ids------scope

user_------previllage(role)

 

关于资源的解释

https://andaily.com/blog/?cat=19

resource用于将系统提供的各类资源进行分组管理,每一个resource对应一个resource-id, 而一个client details至少要有一个resource-id(对应OauthClientDetails.java中的resourceIds字段).

在spring-oauth-server的security.xml配置文件的70行左右, 你会看到两行配置,如下:

<!--unity resource server filter-->
<oauth2:resource-server id="unityResourceServer" resource-id="unity-resource" token-services-ref="tokenServices"/>

<!--mobile resource server filter-->
<oauth2:resource-server id="mobileResourceServer" resource-id="mobile-resource" token-services-ref="tokenServices"/>

这儿就是配置resource的地方, 看见里面的两个resource-id值.

在这配置往上, 能看见两个<http>的配置, 一个的pattern为/m/**, 另一个为/unity/**, 这就是资源与Spring Security整合后的配置, 注意每个<http>配置里的 ROLE_UNITY与ROLE_MOBILE, 这对应Spring Security的权限; 截图如下:

技术分享

有了以上基础, 及下看我们要添加一个自己的resource, 假设resource-id = myResource, url pattern为/my/api/**, 权限为ROLE_MY_RESOURCE, scope为 read; 其配置如下:

1.添加<oauth2:resource-server> , resource-id=myResource, 如下:

<oauth2:resource-server id="myResourceServer" resource-id="myResource" token-services-ref="tokenServices"/>

注意, id值需要唯一
2.添加<http>配置, 如下:

<http pattern="/my/api/**" create-session="never" entry-point-ref="oauth2AuthenticationEntryPoint"
      access-decision-manager-ref="oauth2AccessDecisionManager" use-expressions="false">
    <anonymous enabled="false"/>

    <intercept-url pattern="/my/api/**" access="ROLE_MY_RESOURCE,SCOPE_READ"/>

    <custom-filter ref="myResourceServer" before="PRE_AUTH_FILTER"/>
    <access-denied-handler ref="oauth2AccessDeniedHandler"/>
    <csrf disabled="true"/>
</http>

说明: 一个<resource-server>可以配置多个<http>, 使用不同的url pattern

OK, 配置完成, 新增resource: myResource; 这时候, 所有以/my/api/** 开头的URL请求都将受到 OAUTH2的保护, 及下来在业务中创建client details, 记得把resourceIds设置为myResource,且要有ROLE_MY_RESOURCE的权限.

 


以上是关于spring-oauth-server实践(2-1)问题澄清-关于资源角色和scope的主要内容,如果未能解决你的问题,请参考以下文章

spring-oauth-server实践(1-5)为客户mobile-client开通授权码模式申请access_token,并使用access_token访问需要鉴权的业务

spring-oauth-server入门(1-9)CLIENT_模式下 authorities的产生

api-gateway实践网关服务集成验证

spring-oauth-server入门(1-11)使用授权方式四:client_credentials 模式的客戶端

spring-oauth-server入门(1-7)使用access_token做業務

api-gateway实践(12)新服务网关 - 审批产生网关身份!