成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

java構建OAuth2授權服務器

瀏覽:157日期:2022-08-09 09:17:47
目錄構建 OAuth2 授權服務器設置客戶端和用戶認證信息設置客戶端信息設置用戶認證信息生成 Token構建 OAuth2 授權服務器

從表現形式上看,OAuth2 授權服務器也是一個獨立的微服務,因此構建授權服務器的方法也是創建一個 SpringBoot 應用程序,我們需要引入對應的 Maven 依賴,如下所示:

<dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId></dependency>

這里的 spring-security-oauth2 就是來自 Spring Security 中的 OAuth2 庫。現在 Maven 依賴已經添加完畢,下一步就是構建 Bootstrap 類作為訪問的入口:

@SpringBootApplication@EnableAuthorizationServerpublic class AuthServer { public static void main(String[] args) {SpringApplication.run(AuthServer.class, args); }}

請注意,這里出現了一個新的注解 @EnableAuthorizationServer,這個注解的作用在于為微服務運行環境提供一個基于 OAuth2 協議的授權服務,該授權服務會暴露一系列基于 RESTful 風格的端點(例如 /oauth/authorize 和 /oauth/token)供 OAuth2 授權流程使用。

構建 OAuth2 授權服務只是集成 OAuth2 協議的第一步,授權服務器是一種集中式系統,管理著所有與安全性流程相關的客戶端和用戶信息。因此,接下來我們需要在授權服務器中對這些基礎信息進行初始化,而 Spring Security 為我們提供了各種配置類來實現這一目標。

設置客戶端和用戶認證信息

OAuth2.0 有幾個授權模式:授權碼模式、簡化模式、密碼模式、客戶端憑證模式。其中,密碼模式以其簡單性得到了廣泛的應用。在接下來的內容中,我們就以密碼模式為例展開講解。

在密碼模式下,用戶向客戶端提供用戶名和密碼,并將用戶名和密碼發給授權服務器從而請求 Token。授權服務器首先會對密碼憑證信息進行認證,確認無誤后,向客戶端發放 Token。整個流程如下圖所示:

java構建OAuth2授權服務器

請注意,授權服務器在這里執行認證操作的目的是驗證傳入的用戶名和密碼是否正確。在密碼模式下,這一步是必需的,如果采用其他授權模式,不一定會有用戶認證這一環節。

確定采用密碼模式后,我們來看為了實現這一授權模式,需要對授權服務器做哪些開發工作。首先我們需要設置一些基礎數據,包括客戶端信息和用戶信息。

設置客戶端信息

我們先來看如何設置客戶端信息。設置客戶端時,用到的配置類是 ClientDetailsServiceConfigurer,該配置類用來配置客戶端詳情服務 ClientDetailsService。用于描述客戶端詳情的 ClientDetails 接口則包含了與安全性控制相關的多個重要方法,該接口中的部分方法定義如下:

public interface ClientDetails extends Serializable { //客戶端唯一性 Id String getClientId(); //客戶端安全碼 String getClientSecret(); //客戶端的訪問范圍 Set<String> getScope(); //客戶端可以使用的授權模式 Set<String> getAuthorizedGrantTypes(); …}

首先 ClientId 是一個必備屬性,用來唯一標識客戶的 Id,而 ClientSecret 代表客戶端安全碼。這里的 Scope 用來限制客戶端的訪問范圍,如果這個屬性為空,客戶端就擁有全部的訪問范圍。常見的設置方式可以是 webclient 或 mobileclient,分別代表 Web 端和移動端。

最后,authorizedGrantTypes 代表客戶端可以使用的授權模式,可選的范圍包括代表授權碼模式的 authorization_code、代表隱式授權模式 implicit、代表密碼模式的 password 以及代表客戶端憑據模式的 client_credentials。這個屬性在設置上也可以添加 refresh_token,通過刷新操作獲取以上授權模式下產生的新 Token。

和實現認證過程類似,Spring Security 也提供了 AuthorizationServerConfigurerAdapter 這個配置適配器類來簡化配置類的使用方式。我們可以通過繼承該類并覆寫其中的 configure(ClientDetailsServiceConfigurer clients) 方法進行配置。使用 AuthorizationServerConfigurerAdapter 進行客戶端信息配置的基本代碼結構如下:

@Configurationpublic class SpringAuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter { @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory().withClient('spring').secret('{noop}spring_secret').authorizedGrantTypes('refresh_token', 'password', 'client_credentials').scopes('webclient', 'mobileclient'); }}

可以看到,我們創建了一個 SpringAuthorizationServerConfigurer 類來繼承 AuthorizationServerConfigurerAdapter,并通過 ClientDetailsServiceConfigurer 配置類設置了授權模式為密碼模式。在授權服務器中存儲客戶端信息有兩種方式,一種就是如上述代碼所示的基于內存級別的存儲,另一種則是通過 JDBC 在數據庫中存儲詳情信息。為了簡單起見,這里使用了內存級別的存儲方式。

同時我們注意到,在設置客戶端安全碼時使用了'{noop}spring_secret'這種格式。這是因為在 Spring Security 5 中統一使用 PasswordEncoder 對密碼進行編碼,在設置密碼時要求格式為“{id}password”。而這里的前綴“{noop}”就是代表具體 PasswordEncoder 的 id,表示我們使用的是 NoOpPasswordEncoder。

@EnableAuthorizationServer 注解會暴露一系列的端點,而授權過程是使用 AuthorizationEndpoint 這個端點進行控制的。要想對該端點的行為進行配置,你可以使用 AuthorizationServerEndpointsConfigurer 這個配置類。和 ClientDetailsServiceConfigurer 配置類一樣,我們也通過使用 AuthorizationServerConfigurerAdapter 配置適配器類進行配置。

因為我們指定了授權模式為密碼模式,而密碼模式包含認證環節。所以針對 AuthorizationServerEndpointsConfigurer 配置類需要指定一個認證管理器 AuthenticationManager,用于對用戶名和密碼進行認證。同樣因為我們指定了基于密碼的授權模式,所以需要指定一個自定義的 UserDetailsService 來替換全局的實現,可以通過如下代碼來配置 AuthorizationServerEndpointsConfigurer:

@Configurationpublic class SpringAuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter { @Autowired private AuthenticationManager authenticationManager; @Autowired private UserDetailsService userDetailsService; @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.authenticationManager(authenticationManager).userDetailsService(userDetailsService); } }

至此,客戶端設置工作全部完成,我們所做的事情就是實現了一個自定義的 SpringAuthorizationServerConfigurer 配置類并覆寫了對應的配置方法。

設置用戶認證信息

設置用戶認證信息所依賴的配置類是 WebSecurityConfigurer 類,Spring Security 同樣提供了 WebSecurityConfigurerAdapter 類來簡化該配置類的使用方式,我們可以繼承 WebSecurityConfigurerAdapter 類并且覆寫其中的 configure() 的方法來完成配置工作。

關于 WebSecurityConfigurer 配置類,我們首先需要明確配置的內容。實際上,設置用戶信息非常簡單,只需要指定用戶名(User)、密碼(Password)和角色(Role)這三項數據即可,如下所示:

@Configurationpublic class SpringWebSecurityConfigurer extends WebSecurityConfigurerAdapter { @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override @Bean public UserDetailsService userDetailsServiceBean() throws Exception { return super.userDetailsServiceBean(); } @Override protected void configure(AuthenticationManagerBuilder builder) throws Exception { builder .inMemoryAuthentication() .withUser('user1') .password('{noop}password1') .roles('USER') .and() .withUser('admin') .password('{noop}password2') .roles('USER', 'ADMIN'); }}

結合上面的代碼,我們看到構建了具有不同角色和密碼的兩個用戶,請注意'user1'代表的角色是一個普通用戶,'admin'則具有管理員角色。我們在設置密碼時,同樣需要添加前綴“{noop}”。同時,我們還看到 authenticationManagerBean()和 userDetailsServiceBean() 方法分別返回了父類的默認實現,而這里返回的 UserDetailsService 和 AuthenticationManager 在前面設置客戶端時會用到。

生成 Token

現在,OAuth2 授權服務器已經構建完畢,啟動這個授權服務器,我們就可以獲取 Token。我們在構建 OAuth2 服務器時已經提到授權服務器中會暴露一批端點供 HTTP 請求進行訪問,而獲取 Token 的端點就是http://localhost:2000/oauth/token。在使用該端點時,我們需要提供前面配置的客戶端信息和用戶信息。

這里使用 Postman 來模擬 HTTP 請求,客戶端信息設置方式如下圖所示:

java構建OAuth2授權服務器

我們在“Authorization”請求頭中指定認證類型為“Basic Auth”,然后設置客戶端名稱和客戶端安全碼分別為“spring”和“spring_secret”。

接下來我們指定針對授權模式的專用配置信息。首先是用于指定授權模式的 grant_type 屬性,以及用于指定客戶端訪問范圍的 scope 屬性,這里分別設置為 “password”和“webclient”。既然設置了密碼模式,所以也需要指定用戶名和密碼用于識別用戶身份,這里,我們以“spring_user”這個用戶為例進行設置,如下圖所示:

java構建OAuth2授權服務器

在 Postman 中執行這個請求,會得到如下所示的返回結果:

{ 'access_token':'d2066f68-665b-4038-9dbe-5dd1035e75a0', 'token_type':'bearer', 'refresh_token':'44009836-731c-4e6a-9cc3-274ce3af8c6b', 'expires_in':3599, 'scope':'all'}

可以看到,除了作為請求參數的 scope,這個返回結果中還包含了 access_token、token_type、refresh_token 和 expires_in 等屬性。這些屬性都很重要。當然,因為每次請求生成的 Token 都是唯一的,所以你在嘗試時獲取的結果可能與我的不同。

到此這篇關于java構建OAuth2授權服務器的文章就介紹到這了,更多相關java構建OAuth2授權服務器內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
99re这里都是精品| 麻豆av一区二区三区| 中文字幕一区二区三区不卡 | 久久先锋影音av鲁色资源网| 国产欧美一区视频| 亚洲地区一二三色| 精品在线一区二区三区| 99热在这里有精品免费| 亚洲一区二区在线看| 91精品国产色综合久久ai换脸 | 久久久久久久久久久电影| 亚洲欧美一区二区三区极速播放| 日韩中文字幕1| 国产999精品久久久久久| 欧美日韩视频| 久久三级视频| xnxx国产精品| 成人美女视频在线看| 国产区日韩欧美| 欧美日韩成人综合| 国产欧美中文在线| 欧美黄色大片网站| 在线亚洲一区二区| 色狠狠一区二区三区香蕉| 亚洲丝袜精品丝袜在线| 国产精品原创巨作av| 国语自产精品视频在线看8查询8| 色琪琪一区二区三区亚洲区| 久久蜜桃一区二区| 成人欧美一区二区三区视频网页| 亚洲欧洲av色图| 亚洲福利一二三区| 很黄很黄激情成人| 国产精品久久久久7777按摩| 欧美日韩一区不卡| 国产盗摄女厕一区二区三区 | 一区二区在线看| 免费久久精品视频| 国产精品一级黄| 色综合久久天天| 欧美aⅴ99久久黑人专区| 国产精品一线二线三线| 亚洲欧洲日产国码二区| 在线亚洲免费视频| 好看的亚洲午夜视频在线| 国产精品综合一区二区三区| 9久草视频在线视频精品| 国内成人免费视频| 日韩你懂的在线播放| 337p日本欧洲亚洲大胆精品| 99国产欧美另类久久久精品| 欧美国产日产图区| 国产一区亚洲一区| 国产亚洲福利| 亚洲视频在线观看三级| 99日韩精品| 久久久久久久久蜜桃| 欧美久久久久| 精品成人一区二区| 国产精品综合一区二区三区| 国产欧美一区二区精品忘忧草 | 激情欧美亚洲| 日韩一区二区三区高清免费看看| 日韩在线a电影| 337p亚洲精品色噜噜噜| 蜜桃在线一区二区三区| 亚洲图色在线| 午夜精品123| aa国产精品| 久久精品噜噜噜成人88aⅴ| 亚洲欧美日韩专区| 亚洲久本草在线中文字幕| 91福利在线看| 91丨porny丨在线| 久久综合久久综合久久| 亚洲精品资源| 久久99九九99精品| 国产亚洲精品aa午夜观看| 国产一区二区在线影院| 国产偷国产偷亚洲高清人白洁 | 欧美日韩视频一区二区三区| 日日噜噜夜夜狠狠视频欧美人 | 国产成人高清视频| 国产精品超碰97尤物18| 在线看国产一区二区| 色综合视频一区二区三区高清| 欧美一区二区三区系列电影| 欧美日一区二区在线观看 | 91精品福利视频| 99vv1com这只有精品| 亚洲成人三级小说| 日韩精品一区二区三区中文不卡 | 久久综合五月天婷婷伊人| 亚洲在线播放| av一本久道久久综合久久鬼色| 亚洲一区二区三区小说| 国产精品毛片一区二区三区| 国产成人在线免费观看| 亚洲精品国产一区二区精华液| 欧美精品三级在线观看| 风流少妇一区二区| 亚洲自拍与偷拍| 国产一区二区精品在线观看| 亚洲欧美日韩小说| 日韩午夜在线影院| 午夜在线一区| 色综合久久综合网欧美综合网| 日韩av午夜在线观看| 欧美性色黄大片| 国产真实乱对白精彩久久| 国产精品久久久久影院老司| 欧美日韩高清一区二区不卡| 在线日韩av| 五月激情综合网| 国产亚洲一区二区三区| 欧美体内she精高潮| 亚洲激情网址| 亚洲va韩国va欧美va精品| 久久久久久久网| 欧美三级中文字幕在线观看| 99国产精品私拍| 91免费看片在线观看| 狠狠色狠狠色综合| 性做久久久久久免费观看| 国产欧美日韩不卡免费| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品视频久久一区| 91视频.com| 国产综合色产在线精品| 婷婷六月综合亚洲| 亚洲欧美激情在线| 亚洲精品一区在线观看| 欧美夫妻性生活| 日本久久电影网| 国产偷久久久精品专区| 国产精品豆花视频| 97久久人人超碰| 国产露脸91国语对白| 午夜视频在线观看一区| 最新国产の精品合集bt伙计| 久久综合狠狠综合久久综合88| 欧美久久婷婷综合色| 色婷婷一区二区| 中文精品视频一区二区在线观看| 欧美连裤袜在线视频| av在线播放一区二区三区| 国产伦精品一区二区三区在线观看 | 日韩一区二区三区四区五区六区| 在线一区二区三区四区五区 | 亚洲午夜精品久久久久久浪潮| 99re8在线精品视频免费播放| 国产成人在线观看| 激情五月激情综合网| 美女国产一区二区三区| 日韩精品一二三| 亚洲综合精品久久| 亚洲欧美成人一区二区三区| 欧美国产综合一区二区| 久久亚洲精华国产精华液 | 欧美色偷偷大香| 91激情在线视频| 久久久久久9| 亚洲在线网站| 亚洲综合欧美| 免费亚洲电影| 国产精品一区二区三区免费观看| 亚洲精选91| 亚洲欧洲另类| 99成人免费视频| 一本色道精品久久一区二区三区 | 国产精品美女久久福利网站| 色一情一乱一乱一91av| 香蕉久久夜色精品国产| 亚洲一区尤物| 裸体素人女欧美日韩| 媚黑女一区二区| 久久另类ts人妖一区二区| 蜜桃精品久久久久久久免费影院| 亚洲一区二区三区午夜| 亚洲欧美日韩视频二区| 久久九九99| 色久优优欧美色久优优| 欧美天堂一区二区三区| 欧美日韩国产天堂| 欧美精品一二三四| 日韩一区二区电影网| 精品久久久久久无| 免费在线亚洲| 久久久久久久久久码影片| 色哟哟精品一区| 91久久精品一区二区二区| 欧美日本在线观看| 日韩欧美专区在线| 久久日一线二线三线suv| 欧美高清在线精品一区| 亚洲三级久久久| 视频一区欧美日韩| 国产在线看一区| 99久久精品情趣| 一区二区视频欧美|