sso 四種授權模式

?單點登錄

單點登錄,英文是 Single Sign On(縮寫為 SSO)。即多個站點共用一臺認證授權服務器,用戶在站點登錄后,可以免登錄訪問其他所有站點。而且,各站點間可以通過該登錄狀態直接交互。例如:

業務邏輯的使用

鑒權:

網關鑒權 微服務

沒有 需要

鑒權 補充

CAS 是 Central Authentication Service 的縮寫 —— 中央認證服務,一種獨立開放指令協議,是 Yale 大學發起的一個企業級開源項目,旨在為 Web 應用系統提供一種可靠的 SSO 解決方案。

SSO是一種思想,而CAS只是實現這種思想的一種框架而已

CAS支持oauth2 協議

SSO是一種思想,或者說是一種解決方案,是抽象的,我們要做的就是按照它的這種思想去實現它

OAuth2是用來允許用戶授權第三方應用訪問他在另一個服務器上的資源的一種協議,它不是用來做單點登錄的,但我們可以利用它來實現單點登錄。

OAuth2

1 介紹

OAuth2是目前最流行的授權機制,用來授權第三方應用,獲取用戶數據。允許用戶授權B應用不提供帳號密碼的方式去訪問該用戶在A應用服務器上的某些特定資源。

2 oauth2.0四個角色

四個角色:

resource owner:資源所有者,這里可以理解為用戶。

client:客戶端,可以理解為一個第三方的應用程序 即微博 CSDN。

resource server:資源服務器,它存儲用戶或其它資源。

authorization server:

認證/授權服務器,它認證resource owner的身份,為 resource owner提供授權審批流程,并最終頒發授權令牌(Access Token)。

認證服務器只有一個 sysauth

資源服務器 訂單 商品 支付

認證的流程

3 四種授權模式

* authorization_code 授權碼模式

* password 密碼模式

* implicit 簡單模式

* client_credentials 客戶端模式

* refresh_token 這個不是一種模式 是支持刷新令牌的意思

1 授權碼模式

一般用于提供給第三方使用

2 簡單模式

一般不會使用

3 密碼模式

一般僅用于系統內部使用

4 客戶端模式

一般不會使用

4 OAUTH2的spring cloud 微服務單點登錄

用戶:就是注冊的用戶

客戶端:就是我們的前端項目

授權服務器:我們可以專門在后臺創建一個專門管授權的微服務

資源微服務:像其他的訂單微服務,什么搜索微服務拉都可以看做用戶能夠訪問的資源

如果我們自己去用java實現OAUTH2.0標準,太麻煩了,幸好有spring-security-oauth2這個插件,就簡單多了,spring-security-oauth2是基于spring-security框架完整實現oauth2協議的框架,具有oauth2中4種模式訪問和第三方登錄等功能。

?四種模式測試

所有授權端點(EndterPoints),意思就是授權微服務啟動后 可以訪問哪些路徑

認證服務器的ip以及端口號 localhost:8500

localhost:8500/oauth/token

路徑

說明

/oauth/authoriz

授權端點

/oauth/token

令牌端點 獲取token

/oauth/confirm_access

用戶確認授權提交端點

/oauth/error

授權服務錯誤信息端點

/oauth/check_token

用于資源服務訪問的令牌解析端點

/oauth/token_key

提供公有密匙的端點,如果你使用JWT(RSA)令牌的

5 spring cloud alibaba 使用oauth2

1 創建父項目

2 啟動nacos

3 創建授權微服務sys-auth

pom文件:

<dependency>

<groupId>org.springframework.security.oauth</groupId>

<artifactId>spring-security-oauth2</artifactId>

<version>2.3.5.RELEASE</version>

</dependency>

<dependency>

<groupId>com.squareup.okhttp3</groupId>

<artifactId>okhttp</artifactId>

</dependency>

<!--security使用的jwt-->

<dependency>

<groupId>org.springframework.security</groupId>

<artifactId>spring-security-jwt</artifactId>

<version>1.1.0.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

授權碼模式

1.配置核心的配置文件

授權的配置信息需要繼承AuthorizationServerConfigurerAdapter

將授權的客戶端的信息保存到內存里面

2.配置springsecurity的配置信息

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.formLogin().permitAll();http.authorizeRequests().antMatchers("/userlogin","/oauth/**").permitAll();// 代表放行 "/login.html","/userlogin","/"http.authorizeRequests().anyRequest().authenticated();//  csrf  方便html 文件  能夠通過http.csrf().disable();http.cors();//跨域}@Resource
private  BCryptPasswordEncoder passwordEncoder;@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("aaa").password(passwordEncoder.encode("123456")).roles("ADMIN");
//        auth.userDetailsService(userDetailsService).passwordEncoder(getPassword());}public void printJsonData(HttpServletResponse response, Result result) {try {response.setContentType("application/json;charset=utf8");  // json格式   編碼是中文ObjectMapper objectMapper = new ObjectMapper();String s = objectMapper.writeValueAsString(result);// 使用ObjectMapper將result轉化json為字符串PrintWriter writer = response.getWriter();writer.print(s);writer.flush();writer.close();}catch (Exception e){e.printStackTrace();}}
}

3.訪問授權站點


?

訪問后登錄?

登錄后獲得授權碼

4.?根據授權碼生成token

localhost:8500/oauth/token?grant_type=authorization_code&code=4WXzET&client_id=admin&redirect_url=http://www.baidu.com&scope=all

登錄

獲得token

簡單模式:

修改oauth2

訪問登錄

localhost:8500/oauth/authorize?response_type=token&client_id=admin&scope=all

獲得token

客戶端模式:

登錄訪問

獲得token

密碼模式?

修改springsecurity的配置信息

修改oauth2配置信息

獲得token

不想重復的輸入第三方的用戶名和密碼放行

校驗token

jwt類型的token

加jar

dependency>
????<groupId>org.springframework.security</groupId>
????<artifactId>spring-security-jwt</artifactId>
????<version>1.1.0.RELEASE</version>
</dependency>

配置bean

使用bean

認證之后直接生成token

安全配置文件中配置認證成功之后使用第三方工具 hutool 發出post請求 ?生成token 返回客戶端

資源服務器

1.添加jar包

<dependency>
????<groupId>org.springframework.security.oauth</groupId>
????<artifactId>spring-security-oauth2</artifactId>
????<version>2.3.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security.oauth.boot/spring-security-oauth2-autoconfigure -->
<dependency>
????<groupId>org.springframework.security.oauth.boot</groupId>
????<artifactId>spring-security-oauth2-autoconfigure</artifactId>
????<version>2.3.5.RELEASE</version>
</dependency>

2.編寫controller

3.編寫bootstrap

4.添加配置中心

5.配置config文件

package com.example.controller.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity(jsr250Enabled = true,prePostEnabled = true,securedEnabled=true)
public class MyResConfig extends ResourceServerConfigurerAdapter {@Overridepublic void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated()//.access("@RbacConfig.hasPermission(request,authentication)").and().csrf().disable();}@Beanpublic TokenStore tokenStore() {return new JwtTokenStore(jwtAccessTokenConverter());}@Beanpublic JwtAccessTokenConverter jwtAccessTokenConverter(){JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();jwtAccessTokenConverter.setSigningKey("test"); // return jwtAccessTokenConverter;}
}

測試token是否生效

攜帶token 訪問資源服務器

Authorization??放在headers里面的

Token的值 要求必須是bearer 類型的 token前面加上這個類型

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160988.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160988.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160988.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#編程題分享(3)

n的階乘問題 輸?整數n&#xff0c;輸出n的階乘。 int n Convert.ToInt32(Console.ReadLine()); int jiecheng 1; for (int i 1; i < n 1; i) {jiecheng * i; // 1 * 2 * 3 * .....} Console.WriteLine("{0}的階乘是&#xff1a;{1}", n, jiecheng); q^n次…

Clickhouse設置多磁盤存儲策略

設置多磁盤存儲 clickhouse安裝完成以后&#xff0c;配置了一個默認的存儲空間&#xff0c; 這個只能配置一個目錄&#xff0c;如果要使用多個磁盤目錄&#xff0c;則需要配置磁盤組策略 查看當前的存儲策略 select name, path, formatReadableSize(free_space) as free, fo…

Django DRF版本號的處理

在restful規范中&#xff0c;后端的API中需要體現版本。如果項目比較大&#xff0c;需要些很多的視圖類&#xff0c;在每一個類中都寫一遍會比較麻煩&#xff0c;所以drf中也支持了全局配置。在每個版本處理的類中還定義了reverse方法&#xff0c;他是用來反向生成URL并攜帶相關…

還記得高中生物書上的莫斯密碼嗎?利用Python破解摩斯密碼的代碼示例!

文章目錄 前言摩爾斯電碼Python實現摩斯密碼對照表加密解密測試 完整代碼總結關于Python技術儲備一、Python所有方向的學習路線二、Python基礎學習視頻三、精品Python學習書籍四、Python工具包項目源碼合集①Python工具包②Python實戰案例③Python小游戲源碼五、面試資料六、Py…

Arduino驅動MLX90614紅外溫度傳感器(溫濕度傳感器)

目錄 1、傳感器特性 2、MLX90614發射率補償方法 3、控制器和傳感器連線圖 4、驅動程序 MLX90614紅外測溫模塊,通過探測物體紅外輻射能量的大小和波長的分布來檢測物體的表面溫度。紅外測溫器由光學系統、光電探測器、信號放大器

一文讀懂 Linux mmap

文章目錄 1.簡介2.實現原理3.相關函數4.mmap和常規文件操作的區別5.作用參考文獻 1.簡介 mmap&#xff08;memory map&#xff09;即內存映射&#xff0c;用于將一個文件或設備映射到進程的地址空間。 實現這樣的映射關系后&#xff0c;進程虛擬地址空間中一段內存地址將與文…

TorchScript C++ 自定義運算符 cpucuda

參考 在 C 中注冊調度運算符 使用自定義 C 運算符擴展 TorchScript 環境&#xff1a; NVIDIA Driver Version : 545.23.08CUDA Version: 12.1Python Version: 3.11Pytorch Version: 2.1Cmake version : 3.18.1工作目錄&#xff1a;workspace/test 一、 C 自定義運算符 創建…

逐字節講解 Redis 持久化(RDB 和 AOF)的文件格式

前言 相信各位對 Redis 的這兩種持久化機制都不陌生&#xff0c;簡單來說&#xff0c;RDB 就是對數據的全量備份&#xff0c;AOF 則是增量備份&#xff0c;而從 4.0 版本開始引入了混合方式&#xff0c;以 7.2.3 版本為例&#xff0c;會生成三類文件&#xff1a;RDB、AOF 和記…

2014年5月28日 Go生態洞察:GopherCon 2014大會回顧

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

Java面試附答案:掌握關鍵技能,突破面試難題!

問題&#xff1a;什么是大O表示法&#xff1f;它在Java中的應用是什么&#xff1f; 回答&#xff1a; 大O表示法是一種用來衡量算法復雜度的方法&#xff0c;它描述了算法的時間復雜度和空間復雜度的增長速度。它使用符號O(n)來表示算法的漸進時間復雜度&#xff0c;其中n表示…

如何讓Python2與Python3共存

安裝 首先分別安裝Py2和Py3&#xff0c;我都安裝到C盤根目錄里了&#xff0c;然后分別將Py2和Py3都配置到系統環境變量中去&#xff1a;C:\Python36\Scripts\;C:\Python36\;C:\Python27\;C:\Python27\Scripts; 配置 修改兩個版本的可執行文件名字 驗證 重新配置一下pip …

Ubuntu刪除應用圖標

刪除用戶下的圖標 sudo nautilus ~/.local/share/applications刪除系統下的圖標 sudo nautilus /usr/share/applications

大數據-之LibrA數據庫系統告警處理(ALM-25500 KrbServer服務不可用)

告警解釋 系統按30秒周期性檢測組件KrbServer的服務狀態。當檢測到組件KrbServer服務異常時產生該告警。 當檢測到組件KrbServer服務恢復時告警恢復。 告警屬性 告警ID 告警級別 可自動清除 25500 致命 是 告警參數 參數名稱 參數含義 ServiceName 產生告警的服務…

解決MySQL中某列數據過長無法入庫的問題-Details:data too long for column `xxx` at row 1

問題描述&#xff1a; 我在將軌跡的經緯度轉換為字符串入庫時&#xff0c;遇到寫入問題 Mysql數據入庫報錯&#xff1a; Caused by:java.long.exception:寫入數據庫表失敗.Details:data too long for column xxx at row 1&#xff0c;我的xxx字段類型是string,在mysql庫表中…

加速CI構建,實現高效流水線——CloudBees CI發布工作區緩存功能

加速軟件交付流程能夠更快接觸到客戶&#xff0c;獲得競爭優勢。然而&#xff0c;識別這一過程中存在的瓶頸可能頗具挑戰。讓我們從審查構建和測試階段開始著手。例如&#xff0c;當CI作業執行時間較長時&#xff0c;它會延遲開發人員的反饋循環&#xff0c;從而可能導致發布延…

使用Python解析CAN總線

緣起 在新能源車輛的開發和維護中&#xff0c;經常需要對CAN總線數據進行分析。CANOE等總線軟件雖然方便&#xff0c;但功能有限&#xff0c;難以滿足數據分析的要求。Matlab的Vehicle Network Toolbox可以方便的進行數據解析和分析&#xff0c;它是閉源且收費的。因此&#x…

SpringBoot啟動順序

前言 每次有人問起SpringBoot的啟動順序是不是又來翻博客了&#xff1f;其實只需要稍微查看Spring的源碼即可 步驟 SpringBoot的入口org.springframework.boot.SpringApplication#run(String... args), 這里面實現了SpringBoot程序啟動的所有步驟 啟動事件的順序可以看監聽器…

uni-app 使用uni.getLocation獲取經緯度配合騰訊地圖api獲取當前地址

前言 最近在開發中需要根據經緯度獲取當前位置信息&#xff0c;傳遞給后端&#xff0c;用來回顯顯示當前位置 查閱uni-app文檔&#xff0c;發現uni.getLocation () 可以獲取到經緯度&#xff0c;但是在小程序環境沒有地址信息 思考怎么把經緯度換成地址&#xff0c;如果經緯度…

buildadmin+tp8表格操作(1)----表頭上方添加按鈕和自定義按鈕

buildAdmin 的表頭上添加一些按鈕&#xff0c;并實現功能 添加按鈕 <template><!-- buttons 屬性定義了 TableHeader 本身支持的頂部按鈕&#xff0c;僅需傳遞按鈕名即可 --><!-- 這里的框架自帶的 頂部按鈕 分別有 刷新 &#xff0c; 添加&#xff0c; 編輯&…

C++ 問題 怎么在C++11標準語法中調用C++20的類

一. 問題 在工作中,因為一個算法功能需要跟別的部門對接,他們提供了該算法的頭文件.h,靜態庫.lib,動態庫.dll。但是頭文件中使用了C++20才有的新特性,如#include等,而本地使用的vs2015開發環境,只支持C++11標準語法,這種情況下,該怎么把該算法集成到本地項目中呢? …