国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【OAuth2系列】Spring Cloud Gateway 作為OAuth2 Client接入第三方單點(diǎn)登錄代碼實(shí)踐

這篇具有很好參考價(jià)值的文章主要介紹了【OAuth2系列】Spring Cloud Gateway 作為OAuth2 Client接入第三方單點(diǎn)登錄代碼實(shí)踐。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

? ? ? ? 在年初的時(shí)候我參與了一個(gè)項(xiàng)目,當(dāng)時(shí)是很多家公司協(xié)同完成這個(gè)項(xiàng)目,其中一個(gè)公司專門負(fù)責(zé)登錄這塊的內(nèi)容,需要我們的后端接入他們的單點(diǎn)登錄(OAuth2 授權(quán)碼模式),這塊接入工作是由我來負(fù)責(zé),我們的項(xiàng)目是微服務(wù)架構(gòu),經(jīng)過網(wǎng)上各種查閱資料發(fā)現(xiàn)網(wǎng)關(guān)作為OAuth2 Client接入單點(diǎn)登錄,將用戶信息解析傳遞給下游微服務(wù)是最佳方案,在本文中我將詳細(xì)講解怎么基于Spring Cloud Gateway 接入第三方單點(diǎn)登錄。

  • 如文章中有明顯錯(cuò)誤或者用詞不當(dāng)?shù)牡胤?,歡迎大家在評論區(qū)批評指正,我看到后會(huì)及時(shí)修改。
  • 如想要和博主進(jìn)行技術(shù)棧方面的討論和交流可私信我。

目錄

1. 前言

2. 流程圖

3. 開發(fā)環(huán)境搭建

3.1. 項(xiàng)目結(jié)構(gòu)

3.2. 所用版本工具

3.3.?pom依賴

4. 核心代碼

4.1. 網(wǎng)關(guān)模塊核心代碼

4.1.1. 編寫網(wǎng)關(guān)yml配置

4.1.2. 編寫Security授權(quán)配置主文件

4.1.3. 編寫認(rèn)證過濾器

4.1.4. 重寫DefaultServerOAuth2AuthorizationRequestResolver

?4.1.5. 編寫OAuth2User實(shí)現(xiàn)類

?4.1.6. 編寫url白名單配置類

4.1.7.? 編寫userInfo過濾器

?4.1.8. 編寫ReactiveOAuth2UserService實(shí)現(xiàn)類

4.2. 資源服務(wù)器核心代碼

4.2.1. 編寫資源服務(wù)器yml

4.2.2. 編寫資源服務(wù)器測試controller

5. 登錄測試

6. 參考鏈接


1. 前言

????????Spring Cloud Gateway是Spring Cloud生態(tài)系統(tǒng)中的一個(gè)組件,主要用于構(gòu)建微服務(wù)架構(gòu)中的網(wǎng)關(guān)服務(wù)。它提供了一種靈活而強(qiáng)大的方式來路由請求、過濾請求以及添加各種功能,如負(fù)載均衡、熔斷、安全性等。通過將Spring Cloud Gateway作為OAuth2 Client,可以實(shí)現(xiàn)用戶在系統(tǒng)中的統(tǒng)一認(rèn)證體驗(yàn)。用戶只需要一次登錄,即可訪問多個(gè)微服務(wù),避免了在每個(gè)服務(wù)中都進(jìn)行獨(dú)立的認(rèn)證,下游微服務(wù)只需要專注自己的業(yè)務(wù)代碼即可。

2. 流程圖

? ? ? ? 讓我們來先看一下基于網(wǎng)關(guān)集成單點(diǎn)登錄的流程圖(OAuth2授權(quán)碼模式),我這邊只是一個(gè)大致流程,想要看完整細(xì)致流程的同學(xué)可以去看一下大佬寫的這篇文章:Spring Cloud Gateway作為OAuth2 Client_oauth2客戶端接口為什么跳轉(zhuǎn)到login_羅小爬EX的博客-CSDN博客

【OAuth2系列】Spring Cloud Gateway 作為OAuth2 Client接入第三方單點(diǎn)登錄代碼實(shí)踐,安全框架,spring cloud,gateway,spring

3. 開發(fā)環(huán)境搭建

3.1. 項(xiàng)目結(jié)構(gòu)

基于Spring Cloud Gateway作為OAuth2 Client接入單點(diǎn)登錄的項(xiàng)目結(jié)構(gòu)如下圖所示:

【OAuth2系列】Spring Cloud Gateway 作為OAuth2 Client接入第三方單點(diǎn)登錄代碼實(shí)踐,安全框架,spring cloud,gateway,spring

由上圖可以看出這個(gè)項(xiàng)目(demo)是微服務(wù)組織架構(gòu),這里我只創(chuàng)建了兩個(gè)moudle(父模塊不算)即網(wǎng)關(guān)和資源服務(wù)器。

3.2. 所用版本工具

依賴 版本
Spring Boot 2.6.3

Spring Cloud Alibaba

2021.0.1.0
Spring Cloud? 2021.0.1
java 1.8
redis 6.2

3.3.?pom依賴

1. 父模塊依賴

  <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>2021.0.1</spring-cloud.version>
        <cloud-alibaba.version>2021.0.1.0</cloud-alibaba.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- springCloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2.? 網(wǎng)關(guān)模塊依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
</dependencies>

3. 資源服務(wù)器模塊依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>
</dependencies>

4. 核心代碼

4.1. 網(wǎng)關(guān)模塊核心代碼

4.1.1. 編寫網(wǎng)關(guān)yml配置
server:
  reactive:
    session:
      cookie:
        http-only: true
  port: 8888
system:
  whiteList:
    - "/auth"
    - "/oauth2"
    - "/favicon.ico"
    - "/login"
spring:
  cloud:
    gateway:
      routes:
        - id: geoscene-back-resource
          uri: http://127.0.0.1:8090
          predicates:
            - Path=/resource/**
          filters:
            - TokenRelay
            - UserInfoRelay
  session:
    store-type: redis # 會(huì)話存儲類型
    redis:
      cleanup-cron: 0 * * * * *
      flush-mode: on_save # 會(huì)話刷新模式
      namespace: gateway:session # 用于存儲會(huì)話的鍵的命名空間
      save-mode: on_set_attribute
  redis:
    host: localhost
    port: 6379
#    password: 123456
  security:
    filter:
      order: 5
    oauth2:
      client:
        registration:
          gas:
            provider: gas
            client-id: 在第三方授權(quán)中心獲取的 client-id
            client-secret: 在第三方授權(quán)中心獲?。ㄗ远x)的 client-secret
            redirect-uri: http://127.0.0.1:8888/login/oauth2/code/gas
            authorization-grant-type: authorization_code
            client-authentication-method: client_secret_basic
            scope: userinfo
        provider:
          gas:
            issuer-uri: 填寫第三方認(rèn)證地址
#
logging:
  level:
    root: INFO
    org.springframework.web: INFO
    org.springframework.security: INFO
    org.springframework.security.oauth2: INFO
    org.springframework.cloud.gateway: INFO




4.1.2. 編寫Security授權(quán)配置主文件
@Configuration(proxyBeanMethods = false)
@EnableWebFluxSecurity
public class Oauth2ClientSecurityConfig {
    private String oauth2LoginEndpoint = "/login/oauth2/code/gas";

    @Bean
    public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http, ServerOAuth2AuthorizationRequestResolver saveRequestServerOAuth2AuthorizationRequestResolver) {
        http
                .authorizeExchange(authorize -> authorize
                        .pathMatchers("/auth/**", "/oauth2/**"
                        ).permitAll()
                        .anyExchange().authenticated()
                )
                .oauth2Login(oauth2Login -> oauth2Login
                        // 發(fā)起 OAuth2 登錄的地址(服務(wù)端)
                        .authorizationRequestResolver(saveRequestServerOAuth2AuthorizationRequestResolver)
                        // OAuth2 外部用戶登錄授權(quán)后的跳轉(zhuǎn)地址(服務(wù)端)
                        .authenticationMatcher(new PathPatternParserServerWebExchangeMatcher(
                                oauth2LoginEndpoint))
                )
                .cors().disable();
        return http.build();
    }

    /**
     * OAuth2 Client Authorization Endpoint /oauth2/authoriztion/{clientRegId} 
     * 請求解析器擴(kuò)展實(shí)現(xiàn) - 支持提取query參數(shù)redirect_uri,用作后續(xù)OAuth2認(rèn)證完成后網(wǎng)關(guān)重定向到該指定redirect_uri。
     * 適用場景:前端應(yīng)用 -> 網(wǎng)關(guān) -> 網(wǎng)關(guān)返回401 -> 前端應(yīng)用重定向到/oauth2/authorization/{clientRegId}?redirect_uri=http://登錄后界面 -> 網(wǎng)關(guān)完成OAuth2認(rèn)證后再重定向回http://登錄后界面
     */
    @Bean
    @Primary
    public ServerOAuth2AuthorizationRequestResolver saveRequestServerOAuth2AuthorizationRequestResolver(ReactiveClientRegistrationRepository clientRegistrationRepository) {
        return new SaveRequestServerOAuth2AuthorizationRequestResolver(clientRegistrationRepository);
    }

    /**
     * 自定義UserInfo過濾器工廠
     */
    @Bean
    public UserInfoRelayGatewayFilterFactory userInfoRelayGatewayFilterFactory() {
        return new UserInfoRelayGatewayFilterFactory();
    }

}
4.1.3. 編寫認(rèn)證過濾器
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
@Slf4j
public class CustomWebFilter implements WebFilter {
    @Autowired
    private UrlConfig urlConfig;
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        // 請求對象
        ServerHttpRequest request = exchange.getRequest();
        // 響應(yīng)對象
        ServerHttpResponse response = exchange.getResponse();

        return exchange.getSession().flatMap(webSession -> {

            for (int i = 0; i <urlConfig.getWhiteList().size() ; i++) {
                if (request.getURI().getPath().contains(urlConfig.getWhiteList().get(i))) {
                    return chain.filter(exchange);
                }
            }

            if( webSession.getAttribute("SPRING_SECURITY_CONTEXT")==null||!((SecurityContext)webSession.getAttribute("SPRING_SECURITY_CONTEXT")).getAuthentication().isAuthenticated()){
                JSONObject message = new JSONObject();
                message.put("code", 401);
                message.put("status","fail");
                message.put("message", "缺少身份憑證");
                message.put("data", "http://127.0.0.1:8888/oauth2/authorization/gas");
                // 轉(zhuǎn)換響應(yīng)消息內(nèi)容對象為字節(jié)
                byte[] bits = message.toJSONString().getBytes(StandardCharsets.UTF_8);
                DataBuffer buffer = response.bufferFactory().wrap(bits);
                // 設(shè)置響應(yīng)對象狀態(tài)碼 401
                response.setStatusCode(HttpStatus.UNAUTHORIZED);
                // 設(shè)置響應(yīng)對象內(nèi)容并且指定編碼,否則在瀏覽器中會(huì)中文亂碼
                response.getHeaders().add(HttpHeaders.CONTENT_TYPE,  "application/json;charset=UTF-8");
                // 返回響應(yīng)對象
                return response.writeWith( Mono.just(buffer) );
            }
            return chain.filter(exchange);
        }).then(Mono.fromRunnable(() -> {
            log.info("this is a post filter");
        }));
    }
}

上述代碼的主要功能為攔截進(jìn)入網(wǎng)關(guān)的每一個(gè)請求,若沒有身份憑證(令牌)則返回/oauth2/authorization/{clientRegId}。

4.1.4. 重寫DefaultServerOAuth2AuthorizationRequestResolver
public class SaveRequestServerOAuth2AuthorizationRequestResolver extends DefaultServerOAuth2AuthorizationRequestResolver {
    private static final Log logger = LogFactory.getLog(SaveRequestServerOAuth2AuthorizationRequestResolver.class);
    /**
     * redirect uri參數(shù)名稱
     */
    private static final String PARAM_REDIRECT_URI = "redirect_uri";
    /**
     * WebSession對應(yīng)的saveRequest屬性名
     * 完全沿用(兼容)WebSessionServerRequestCache定義
     */
    private static final String DEFAULT_SAVED_REQUEST_ATTR = "SPRING_SECURITY_SAVED_REQUEST";
    private String sessionAttrName = DEFAULT_SAVED_REQUEST_ATTR;

    /**
     * Creates a new instance
     *
     * @param clientRegistrationRepository the repository to resolve the
     *                                     {@link ClientRegistration}
     */
    public SaveRequestServerOAuth2AuthorizationRequestResolver(
            ReactiveClientRegistrationRepository clientRegistrationRepository) {
        super(clientRegistrationRepository);
    }
    @Override
    public Mono<OAuth2AuthorizationRequest> resolve(ServerWebExchange exchange) {

        return super.resolve(exchange)
                .doOnNext(OAuth2AuthorizationRequest -> {
//                    獲取query參數(shù)redirect_uri
                    Optional.ofNullable(exchange.getRequest())
                            .map(ServerHttpRequest::getQueryParams)
                            .map(queryParams -> queryParams.get(PARAM_REDIRECT_URI))
                            .filter(redirectUris -> !CollectionUtils.isEmpty(redirectUris))
                            .map(redirectUris -> redirectUris.get(0))
                            .ifPresent(redirectUri -> {
                                //若redirect_uri非空,則覆蓋Session中的SPRING_SECURITY_SAVED_REQUEST為redirect_uri
                                //即后續(xù)認(rèn)證成功后可重定向回前端指定頁面
                                exchange.getSession().subscribe(webSession -> {
                                    webSession.getAttributes().put(this.sessionAttrName, redirectUri);
                                    logger.debug(LogMessage.format("SCG OAuth2 authorization endpoint queryParam redirect_uri added to WebSession: '%s'", redirectUri));
                                });
                            });
                });
    }

}
?4.1.5. 編寫OAuth2User實(shí)現(xiàn)類

public class CustomUser implements OAuth2User, Serializable {
    private Map<String, Object> attributes;
    private Collection<? extends GrantedAuthority> authorities;
    private String name;

    public CustomUser(Map<String, Object> attributes, Collection<? extends GrantedAuthority> authorities, String name) {
        this.attributes = attributes;
        this.authorities = authorities;
        this.name = name;
    }

    public CustomUser() {
    }

    @Override
    public Map<String, Object> getAttributes() {
        return attributes;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return authorities;
    }

    @Override
    public String getName() {
        return name;
    }

    public void setAttributes(Map<String, Object> attributes) {
        this.attributes = attributes;
    }

    public void setAuthorities(Collection<? extends GrantedAuthority> authorities) {
        this.authorities = authorities;
    }

    public void setName(String name) {
        this.name = name;
    }
}
?4.1.6. 編寫url白名單配置類
@Configuration
@ConfigurationProperties(prefix = "system")
public class UrlConfig {
    // 配置文件使用list接收
    private List<String> whiteList;
    public List<String> getWhiteList() {
        return whiteList;
    }
    public void setWhiteList(List<String> whiteList) {
        this.whiteList = whiteList;
    }
}
4.1.7.? 編寫userInfo過濾器
public class UserInfoRelayGatewayFilterFactory extends AbstractGatewayFilterFactory<Object> {

    private final static String USER_INFO_HEADER = "userInfo";

    public UserInfoRelayGatewayFilterFactory() {
        super(Object.class);
    }

    public GatewayFilter apply() {
        return apply((Object) null);
    }

    @Override
    public GatewayFilter apply(Object config) {
        return (exchange, chain) -> exchange.getPrincipal()
                // .log("token-relay-filter")
                .filter(principal -> principal instanceof OAuth2AuthenticationToken)
                .cast(OAuth2AuthenticationToken.class)
                //.flatMap(authentication -> authorizedClient(exchange, authentication))
                .map(OAuth2AuthenticationToken::getPrincipal)
                .map(oAuth2User -> withUserInfoHeader(exchange, oAuth2User))
                .defaultIfEmpty(exchange)
                .flatMap(chain::filter);
    }

    private ServerWebExchange withUserInfoHeader(ServerWebExchange exchange, OAuth2User oAuth2User) {
        //String userName = oAuth2User.getName();
        Map<String, Object> userAttrs = oAuth2User.getAttributes();
        if (oAuth2User instanceof OidcUser) {
            userAttrs = ((OidcUser) oAuth2User).getUserInfo().getClaims();
        }
        String userAttrsJson = JsonUtils.toJson(userAttrs);
        return exchange.mutate()
                .request(r -> r.headers(headers -> headers.add(USER_INFO_HEADER, userAttrsJson)))
                .build();
    }

}
?4.1.8. 編寫ReactiveOAuth2UserService實(shí)現(xiàn)類
@Component
public class CustomOAuth2UserService implements ReactiveOAuth2UserService<OAuth2UserRequest, OAuth2User> {

    private static final String INVALID_USER_INFO_RESPONSE_ERROR_CODE = "invalid_user_info_response";

    private static final String MISSING_USER_INFO_URI_ERROR_CODE = "missing_user_info_uri";

    private static final String MISSING_USER_NAME_ATTRIBUTE_ERROR_CODE = "missing_user_name_attribute";

    private static final ParameterizedTypeReference<Map<String, Object>> STRING_OBJECT_MAP = new ParameterizedTypeReference<Map<String, Object>>() {
    };

    private static final ParameterizedTypeReference<Map<String, String>> STRING_STRING_MAP = new ParameterizedTypeReference<Map<String, String>>() {
    };

    private WebClient webClient = WebClient.create();
    
@Override
public Mono<OAuth2User> loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
    return Mono.fromCallable(() -> {
        String tokenStr = userRequest.getAccessToken().getTokenValue();
        try {
            SignedJWT sjwt = SignedJWT.parse(tokenStr);
            JWTClaimsSet claims = sjwt.getJWTClaimsSet();
            claims.getSubject();
            Collection<? extends GrantedAuthority> res = new ArrayList<>();
            CustomUser customUser=new CustomUser( claims.getClaims(),res,claims.getSubject());
            return customUser;

        } catch (ParseException e) {
            e.printStackTrace();
            throw new OAuth2AuthenticationException(new OAuth2Error("500"),"服務(wù)器返回錯(cuò)誤的jwt");
        }
    });
}

}

4.2. 資源服務(wù)器核心代碼

4.2.1. 編寫資源服務(wù)器yml
server:
  port: 8090
  servlet:
    context-path: /resource
4.2.2. 編寫資源服務(wù)器測試controller
@RestController
public class ArticleController {
    @GetMapping("/user-info")
    public String getUserName( @RequestHeader String userInfo){
        return userInfo;
    }
}

5. 登錄測試

1. 直接訪問資源服務(wù)器接口

【OAuth2系列】Spring Cloud Gateway 作為OAuth2 Client接入第三方單點(diǎn)登錄代碼實(shí)踐,安全框架,spring cloud,gateway,spring

由上圖可看出無法直接訪問資源服務(wù)器接口,前端接收到此返回信息后根據(jù)data中返回的路徑加上redirect_uri(http://127.0.0.1:8888/oauth2/authorization/gas?redirect_uri=http://www.baidu.com),發(fā)送頁面請求后可跳轉(zhuǎn)至登錄中心,認(rèn)證成功后界面會(huì)重定向至redirect_uri所指定的界面(我這里寫的百度)。

【OAuth2系列】Spring Cloud Gateway 作為OAuth2 Client接入第三方單點(diǎn)登錄代碼實(shí)踐,安全框架,spring cloud,gateway,spring

跳轉(zhuǎn)至登錄界面進(jìn)行認(rèn)證。

認(rèn)證成功后重定向至redirect_uri所指定的界面(百度)。

2. 再次訪問資源服務(wù)器接口

【OAuth2系列】Spring Cloud Gateway 作為OAuth2 Client接入第三方單點(diǎn)登錄代碼實(shí)踐,安全框架,spring cloud,gateway,spring

訪問接口成功。

6. 參考鏈接

Spring Cloud Gateway作為OAuth2 Client_oauth2客戶端接口為什么跳轉(zhuǎn)到login_羅小爬EX的博客-CSDN博客

將Spring Cloud Gateway 與OAuth2模式一起使用_jwk-set-uri_ReLive27的博客-CSDN博客

第15章 Spring Security OAuth2 初始_authorizeexchange-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-766846.html

到了這里,關(guān)于【OAuth2系列】Spring Cloud Gateway 作為OAuth2 Client接入第三方單點(diǎn)登錄代碼實(shí)踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • OAuth2.0 實(shí)踐 Spring Authorization Server 搭建授權(quán)服務(wù)器 + Resource + Client

    OAuth2.0 實(shí)踐 Spring Authorization Server 搭建授權(quán)服務(wù)器 + Resource + Client

    title: OAuth2.0 實(shí)踐 Spring Authorization Server 搭建授權(quán)服務(wù)器 + Resource + Client date: 2023-03-27 01:41:26 tags: OAuth2.0 Spring Authorization Server categories: 開發(fā)實(shí)踐 cover: https://cover.png feature: false 目前 Spring 生態(tài)中的 OAuth2 授權(quán)服務(wù)器是 Spring Authorization Server ,原先的 Spring Security OAuth 已經(jīng)停止更新

    2024年02月08日
    瀏覽(22)
  • 微服務(wù)統(tǒng)一認(rèn)證方案Spring Cloud OAuth2+JWT

    微服務(wù)統(tǒng)一認(rèn)證方案Spring Cloud OAuth2+JWT

    目錄 前言 一、微服務(wù)架構(gòu)下的統(tǒng)一認(rèn)證場景 二、微服務(wù)架構(gòu)下的統(tǒng)一認(rèn)證思路 1.基于Session的認(rèn)證方式 2.基于token的認(rèn)證方式(主流) 三、OAuth2開放授權(quán)協(xié)議/標(biāo)準(zhǔn) 1.OAuth2介紹 2.OAuth2協(xié)議角色和流程 3.什么情況下需要使用OAuth2? 4.OAuth2的頒發(fā)Token授權(quán)方式 四、Spring Cloud OAuth2+JWT實(shí)現(xiàn)

    2023年04月09日
    瀏覽(23)
  • Spring Authorization Server入門 (八) Spring Boot引入Security OAuth2 Client對接認(rèn)證服務(wù)

    Spring Authorization Server入門 (八) Spring Boot引入Security OAuth2 Client對接認(rèn)證服務(wù)

    在之前的文章中實(shí)現(xiàn)了一個(gè)認(rèn)證服務(wù),并且添加了一些自定義的內(nèi)容,現(xiàn)在暫時(shí)沒想到認(rèn)證服務(wù)的新內(nèi)容,本篇文章就先寫一下客戶端對接的吧,水一篇。 當(dāng)用戶通過客戶端去訪問一個(gè)受限的資源時(shí),客戶端會(huì)檢測是否有登錄信息,沒有登錄信息會(huì)重定向至認(rèn)證服務(wù)器去請求

    2024年02月21日
    瀏覽(28)
  • Spring Gateway+Security+OAuth2+RBAC 實(shí)現(xiàn)SSO統(tǒng)一認(rèn)證平臺

    Spring Gateway+Security+OAuth2+RBAC 實(shí)現(xiàn)SSO統(tǒng)一認(rèn)證平臺

    背景:新項(xiàng)目準(zhǔn)備用SSO來整合之前多個(gè)項(xiàng)目的登錄和權(quán)限,同時(shí)引入網(wǎng)關(guān)來做后續(xù)的服務(wù)限流之類的操作,所以搭建了下面這個(gè)系統(tǒng)雛形。 : Spring Gateway, Spring Security, JWT, OAuth2, Nacos, Redis, Danymic datasource, Javax,?thymeleaf 如果對上面這些技術(shù)感興趣,可以繼續(xù)往下閱讀 如

    2024年02月13日
    瀏覽(25)
  • spring cloud、gradle、父子項(xiàng)目、微服務(wù)框架搭建---spring secuity oauth2、mysql 授權(quán)(九)

    spring cloud、gradle、父子項(xiàng)目、微服務(wù)框架搭建---spring secuity oauth2、mysql 授權(quán)(九)

    https://preparedata.blog.csdn.net/article/details/120062997 新建兩個(gè)服務(wù) 1.授權(quán)服務(wù) 端口號:11007 2.資源服務(wù) 端口號:11004 資源服務(wù)可以是訂單服務(wù)、用戶服務(wù)、商品服務(wù)等等 當(dāng)然這兩個(gè)服務(wù)也可以合并到一起, 依次順序AuthorizationServerConfiguration、ResourceServerConfig、WebSecurityConfiguration;

    2024年02月10日
    瀏覽(27)
  • Spring Authorization Server 1.1 擴(kuò)展實(shí)現(xiàn) OAuth2 密碼模式與 Spring Cloud 的整合實(shí)戰(zhàn)

    Spring Authorization Server 1.1 擴(kuò)展實(shí)現(xiàn) OAuth2 密碼模式與 Spring Cloud 的整合實(shí)戰(zhàn)

    項(xiàng)目源碼 :youlai-mall 通過 Spring Cloud Gateway 訪問認(rèn)證中心進(jìn)行認(rèn)證并獲取得到訪問令牌。 再根據(jù)訪問令牌 access_token 獲取當(dāng)前登錄的用戶信息。 Spring Security OAuth2 的最終版本是2.5.2,并于2022年6月5日正式宣布停止維護(hù)。Spring 官方為此推出了新的替代產(chǎn)品,即 Spring Authorization

    2024年02月04日
    瀏覽(25)
  • java版Spring Cloud+Mybatis+Oauth2+分布式+微服務(wù)+實(shí)現(xiàn)工程管理系統(tǒng)

    java版Spring Cloud+Mybatis+Oauth2+分布式+微服務(wù)+實(shí)現(xiàn)工程管理系統(tǒng)

    ?鴻鵠工程項(xiàng)目管理系統(tǒng) Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分離構(gòu)建工程項(xiàng)目管理系統(tǒng) 1. 項(xiàng)目背景 一、隨著公司的快速發(fā)展,企業(yè)人員和經(jīng)營規(guī)模不斷壯大。為了提高工程管理效率、減輕勞動(dòng)強(qiáng)度、提高信息處理速度和準(zhǔn)確性,公司對內(nèi)部工程管理的提升提出了更高

    2024年02月07日
    瀏覽(26)
  • Spring Security Oauth2.1 最新版 1.1.0 整合 gateway 完成授權(quán)認(rèn)證(擁抱 springboot 3.1)

    Spring Security Oauth2.1 最新版 1.1.0 整合 gateway 完成授權(quán)認(rèn)證(擁抱 springboot 3.1)

    目錄 背景 demo地址 版本 Spring Boot 3.1 Spring Authorization Server 1.1.0 基礎(chǔ) spring security OAuth2 模塊構(gòu)成 授權(quán)方式 認(rèn)證方式 集成過程 官方demo 代碼集成 依賴 授權(quán)服務(wù)AuthorizationServerConfig配置 重要組件 測試 查看授權(quán)服務(wù)配置 訪問授權(quán)服務(wù) 授權(quán) 回調(diào) 獲取?access_token 獲取用戶信息 個(gè)性

    2024年02月08日
    瀏覽(18)
  • Spring Security Oauth2.1 最新版 1.1.0 整合 (基于 springboot 3.1.0)gateway 完成授權(quán)認(rèn)證

    Spring Security Oauth2.1 最新版 1.1.0 整合 (基于 springboot 3.1.0)gateway 完成授權(quán)認(rèn)證

    目錄 背景 demo地址 版本 Spring Boot 3.1 Spring Authorization Server 1.1.0 基礎(chǔ) spring security OAuth2 模塊構(gòu)成 授權(quán)方式 認(rèn)證方式 集成過程 官方demo 代碼集成 依賴 授權(quán)服務(wù)AuthorizationServerConfig配置 重要組件 測試 查看授權(quán)服務(wù)配置 訪問授權(quán)服務(wù) 授權(quán) 回調(diào) 獲取?access_token 獲取用戶信息 個(gè)性

    2024年02月11日
    瀏覽(24)
  • Spring Cloud Gateway集成Nacos作為注冊中心和配置中心

    本篇文章將介紹Spring Cloud Alibaba體系下Spring Cloud Gateway的搭建,服務(wù)注冊中心和分布式配置中心使用Nacos,后續(xù)將會(huì)持續(xù)更新,介紹集成Sentinel,如何做日志鏈路追蹤,如何做全鏈路灰度發(fā)布設(shè)計(jì),以及Spring Cloud Gateway的擴(kuò)展等。 ? Spring Boot,Spring Cloud,Discovery,Config等基礎(chǔ)依

    2024年02月11日
    瀏覽(507)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包