<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    OIDC - KEYCLOAK - 自定義CLIENT SCOPE

    當CLIENT或用戶在KEYCLOAK中成功登錄后,會返回JWT字符串,其中默認含有權限的信息,但此信息以內嵌的方式呈現,非常不方便。
    "resource_access": {
        "app-springboot-confidential": {
          "roles": [
            "user"
          ]
        },
        "test-employee-service": {
          "roles": [
            "READ_EMPLOYEE"
          ]
        },
        "service-springboot": {
          "roles": [
            "READ_PRODUCTS"
          ]
        },
        "account": {
          "roles": [
            "manage-account",
            "manage-account-links"
          ]
        },
        "test-department-service": {
          "roles": [
            "READ_DEPARTMENT"
          ]
        }
      }

    • 需要將權限的信息輸出到一個KEY中,這時可以新增自定義CLIENT SCOPE。Mapper中新增KEYCLOAK已內置的【realm roles/client roles】,定義輸出到JTW的字段名:my-roles。
    • 授權哪些CLIENT可以讀取此CLIENT SCOPE.
    • 在登錄參數scope中,加入此值:my-roles,這樣在輸出的JWT就會以平面的方式輸出所有roles
    "my-roles": [
        "user",
        "READ_EMPLOYEE",
        "READ_PRODUCTS",
        "manage-account",
        "manage-account-links",
        "READ_DEPARTMENT",
        "offline_access",
        "user"
      ]

    • SPRING SECURITY中取出權限信息:

    @Bean
        public ReactiveJwtAuthenticationConverter jwtAuthenticationConverter(ObjectMapper objectMapper) {
            
            JwtGrantedAuthoritiesConverter jwtGrantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter();
            jwtGrantedAuthoritiesConverter.setAuthorityPrefix("ROLE_");
            jwtGrantedAuthoritiesConverter.setAuthoritiesClaimName("my-roles");
            
    //        KeycloakRealmRoleConverter keycloakRealmRoleConverter = new KeycloakRealmRoleConverter(objectMapper);
            
            ReactiveJwtGrantedAuthoritiesConverterAdapter reactiveJwtGrantedAuthoritiesConverterAdapter = 
                    new ReactiveJwtGrantedAuthoritiesConverterAdapter(
    //                        new KeycloakRealmRoleConverter(objectMapper);
                            jwtGrantedAuthoritiesConverter
                        );
            
            ReactiveJwtAuthenticationConverter jwtConverter = new ReactiveJwtAuthenticationConverter();
            jwtConverter.setJwtGrantedAuthoritiesConverter(reactiveJwtGrantedAuthoritiesConverterAdapter);
            
            return jwtConverter;
        }

    • 判斷是否有權限

    ServerHttpSecurity
                .authorizeExchange(
                    a -> a.pathMatchers("/", "/error").permitAll()
                          .matchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
                          .pathMatchers(HttpMethod.GET, "/protected/**").hasRole("READ_DEPARTMENT")
                          .anyExchange()
                          .authenticated()
                 )

    posted on 2021-12-22 11:15 paulwong 閱讀(755) 評論(0)  編輯  收藏 所屬分類: OAUTH2KEYCLOAK

    主站蜘蛛池模板: 亚洲人成无码久久电影网站| 亚洲av女电影网| 韩国免费a级作爱片无码| 日韩色视频一区二区三区亚洲| 免费a级毛片永久免费| 999zyz**站免费毛片| 亚洲精品国产免费| 国产免费AV片无码永久免费| 亚洲人成无码网站在线观看 | 亚洲真人日本在线| 国产精品久久久久久久久免费| 久久亚洲AV成人无码国产| 日韩精品视频免费观看| 亚洲GV天堂无码男同在线观看| 亚洲精品无码国产| 免费看的黄色大片| 69视频在线观看免费| 朝桐光亚洲专区在线中文字幕| 亚洲视频网站在线观看| 亚洲第一区精品观看| 精品国产污污免费网站入口在线| 亚洲国产美女精品久久| 久久91亚洲人成电影网站| 四虎影视精品永久免费| 中文免费观看视频网站| 免费看黄的成人APP| 美女被吸屁股免费网站| 亚洲入口无毒网址你懂的| 搡女人真爽免费视频大全| 噜噜综合亚洲AV中文无码| 亚洲AV无码精品无码麻豆| 免费A级毛片无码A| 妞干网在线免费观看| 日韩免费无码视频一区二区三区| 一出一进一爽一粗一大视频免费的| 亚洲亚洲人成综合网络| 国产免费AV片无码永久免费| 无码永久免费AV网站| **一级一级毛片免费观看| 国产亚洲人成在线影院| 亚洲国产日韩精品|