私はSpring OAuthを使って遊んでおり、承認サーバとリソースサーバを実装しています。リソースサーバーはuser-info-uriを使用してトークンをデコードします。Spring Security/OAuth:@RolesAllowedにおけるプリンシパルの権限とロールのマッピング
リソースサーバーのコントローラ内のメソッド(一部)は、@RolesAllowed(@PreAuthorize、同じ効果を試しました)によって保護されています。
@RolesAllowed("ROLE_USER")
//@PreAuthorize("hasRole('ROLE_USER')")
@RequestMapping(value = "/test-user", method = RequestMethod.GET)
public String testUser() {
return "You are User!";
}
3人のユーザーがありますが、認証サーバ側で管理:ROLE_USERとROLE_ADMINとユーザー1、ユーザー2とユーザー3を。
リソースサービスは、認証サーバー(パスワード許可フロー)によって生成されたトークンを受け入れ、プリンシパルの詳細についてuser-info-uriに問い合わせます。これまでのところ、設計通りに動作します。
しかし、何が起こったのか、私は理解していないものです。
"principal": {
"password": null,
"username": "user2",
"authorities": [
{
"authority": "ROLE_USER"
}
],
"accountNonExpired": true,
"accountNonLocked": true,
"credentialsNonExpired": true,
"enabled": true
},
そして、正しく非直列化しているように見える:主要な構造(たとえば、user2のために、ROLE_USERを持つ)は、(私は、ユーザーの情報-URIを手動で呼び出しを行った例の目的のために)正しい権限が含まれていますリソースサーバ側で:
2016-08-31 12:30:37.530 DEBUG 32992 --- [nio-9998-exec-1] o.s.s.a.i.a.MethodSecurityInterceptor : Secure object: ReflectiveMethodInvocation: public java.lang.String org.cftap.OAuthResourceController.testUser(); target is of class [org.cftap.OAuthResourceController]; Attributes: [ROLE_USER, ROLE_USER]
2016-08-31 12:30:37.530 DEBUG 32992 --- [nio-9998-exec-1] o.s.s.a.i.a.MethodSecurityInterceptor : Previously Authenticated: or[email protected]ed03ae2: Principal: user2; Credentials: [PROTECTED]; Authenticated: true; Details: remoteAddress=0:0:0:0:0:0:0:1, tokenType=BearertokenValue=<TOKEN>; Granted Authorities: {authority=ROLE_USER}
2016-08-31 12:30:37.530 DEBUG 32992 --- [nio-9998-exec-1] o.s.s.access.vote.AffirmativeBased : Voter: org.springframewor[email protected]4cf62e16, returned: 0
2016-08-31 12:30:37.530 DEBUG 32992 --- [nio-9998-exec-1] o.s.s.access.vote.AffirmativeBased : Voter: [email protected]38f, returned: -1
2016-08-31 12:30:37.530 DEBUG 32992 --- [nio-9998-exec-1] o.s.s.access.vote.AffirmativeBased : Voter: [email protected], returned: -1
2016-08-31 12:30:37.531 DEBUG 32992 --- [nio-9998-exec-1] o.s.s.access.vote.AffirmativeBased : Voter: [email protected]a21f, returned: 0
2016-08-31 12:30:37.536 DEBUG 32992 --- [nio-9998-exec-1] o.s.b.a.audit.listener.AuditListener : AuditEvent [timestamp=Wed Aug 31 12:30:37 CEST 2016, principal=user2, type=AUTHORIZATION_FAILURE, data={type=org.springframework.security.access.AccessDeniedException, message=Access is denied}]
2016-08-31 12:30:37.546 DEBUG 32992 --- [nio-9998-exec-1] o.s.s.w.a.ExceptionTranslationFilter : Access is denied (user is not anonymous); delegating to AccessDeniedHandler
しかし、あなたはデバッグログに見るように、RoleVoter(およびJSR250 1)(許可役割とプリンシパルの権限を組み合わせるが)、それに対する投票は、それゆえ送信します403バック。
私は何か重要なことを忘れましたか?
ありがとうございます。
@RolesAllowed( "USER")helped –