authorizedgranttypes 的詳細闡述

一、authorizedgranttypes定義

在OAuth2.0框架中,authorizedgranttypes是一個用來定義Client可以使用哪種授權類型的參數,授權類型包括:authorization_code、implicit、password、client_credentials、refresh_token。

具體來說:client_id和client_secret是client驗證授權的基礎,但是,client只授權自己的用戶。使用不同的授權類型,client能夠在用戶授權之前獲取access_token,並且在之後使用它。因此,根據不同的業務需求,對授權類型的選擇需要慎重考慮,以確保安全、可靠、有效

二、授權類型的分類

下面將對五種不同的授權類型進行詳細闡述:

1. authorization code授權類型

授權碼類似於一次性密碼,用於獲取access token的中間步驟。

使用授權碼類型進行授權的基本方式:用戶訪問客戶端的應用程序;應用程序將用戶重定向到認證伺服器;用戶輸入其憑據;認證伺服器將用戶重定向到應用程序,並提供授權碼;應用程序將授權碼與簡化令牌請求一起發送給認證伺服器;認證伺服器將訪問令牌發送回應用程序。

2. implicit授權類型

Implicit類型是一種簡化的授權,它給客戶端訪問使用者數據的許可權,跳過了請求令牌的那個過程。相比之下,口令和授權碼的類型需要向伺服器申請一個令牌,該令牌可以用於授權和訪問受保護的資源。這種方式比授權碼安全性低,除非請求是HTTPs即可避免音譯攻擊。

3. password授權類型

通過用戶名和密碼認證信息向認證伺服器處獲取訪問令牌的方式。

當資源所有者知道你的Client並信任你時,您才應該採用這種授權類型,因此,請在伺服器之間禁用此授權類型。

4. client credentials授權類型

client credentials授權類型允許客戶端獲得訪問資源者受保護資源的許可權,而無需資源所有者的授權。在應用程序調用模式中,客戶端是傳統的應用程序,沒有用戶交互界面或IAM情境。

5. refresh token授權類型

當access token即將過期時,可能會使用授權中提供的refresh token來獲得新的access token。

三、Smallbee公司的實例

下面是Smallbee公司的一個應用實例,這個應用程序選擇了兩個授權類型,即authorization_code和client_credentials,用於獲取授權和使用API resources證書。

@Bean
public ClientDetailsService JdbcClientDetailsService() {
return new JdbcClientDetailsService(dataSource);
}
@Bean
public TokenStore tokenStore() {
return new JdbcTokenStore(dataSource);
}

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.withClientDetails(JdbcClientDetailsService());
}

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
.tokenServices(tokenServices())// 配置 TokenServices 參數
.authenticationManager(authenticationManager)// 用於支持 password 授權類型
.userDetailsService(userDetailsService);// 配置 UserDetailsService
endpoints.tokenGranter(tokenGranter(endpoints));
}

@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.allowFormAuthenticationForClients();
}

// 配置 tokenServices 參數
@Bean
public AuthorizationServerTokenServices tokenServices() {
DefaultTokenServices services = new DefaultTokenServices();
services.setAccessTokenValiditySeconds(access_token_expiration_time);
services.setRefreshTokenValiditySeconds(refresh_token_expiration_time);
services.setTokenStore(tokenStore());
services.setSupportRefreshToken(refresh_token_enabled);
services.setClientDetailsService(JdbcClientDetailsService());
return services;
}

// 配置授權類型和確切可用的 token 信息
@Bean
public TokenGranter tokenGranter(final AuthorizationServerEndpointsConfigurer endpoints) {
List granters = new ArrayList();
granters.add(new AuthorizationCodeTokenGranter(endpoints.getTokenServices(), endpoints.getAuthorizationCodeServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
granters.add(new ImplicitTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
granters.add(new RefreshTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
granters.add(new ClientCredentialsTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
granters.add(new ResourceOwnerPasswordTokenGranter(authenticationManager, endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
return new CompositeTokenGranter(granters);
}

四、結語

authorizedgranttypes是OAuth2.0框架中一個非常重要的參數,它定義了Client可以使用的授權類型,根據不同的授權要求,選擇不同的授權類型來保證應用的安全、可靠和有效。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/237058.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:03
下一篇 2024-12-12 12:03

相關推薦

  • index.html怎麼打開 – 詳細解析

    一、index.html怎麼打開看 1、如果你已經擁有了index.html文件,那麼你可以直接使用任何一個現代瀏覽器打開index.html文件,比如Google Chrome、…

    編程 2025-04-25
  • Resetful API的詳細闡述

    一、Resetful API簡介 Resetful(REpresentational State Transfer)是一種基於HTTP協議的Web API設計風格,它是一種輕量級的…

    編程 2025-04-25
  • neo4j菜鳥教程詳細闡述

    一、neo4j介紹 neo4j是一種圖形資料庫,以實現高效的圖操作為設計目標。neo4j使用圖形模型來存儲數據,數據的表述方式類似於實際世界中的網路。neo4j具有高效的讀和寫操作…

    編程 2025-04-25
  • AXI DMA的詳細闡述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基於AMBA…

    編程 2025-04-25
  • 關鍵路徑的詳細闡述

    關鍵路徑是項目管理中非常重要的一個概念,它通常指的是項目中最長的一條路徑,它決定了整個項目的完成時間。在這篇文章中,我們將從多個方面對關鍵路徑做詳細的闡述。 一、概念 關鍵路徑是指…

    編程 2025-04-25
  • c++ explicit的詳細闡述

    一、explicit的作用 在C++中,explicit關鍵字可以在構造函數聲明前加上,防止編譯器進行自動類型轉換,強制要求調用者必須強制類型轉換才能調用該函數,避免了將一個參數類…

    編程 2025-04-25
  • HTMLButton屬性及其詳細闡述

    一、button屬性介紹 button屬性是HTML5新增的屬性,表示指定文本框擁有可供點擊的按鈕。該屬性包括以下幾個取值: 按鈕文本 提交 重置 其中,type屬性表示按鈕類型,…

    編程 2025-04-25
  • crontab測試的詳細闡述

    一、crontab的概念 1、crontab是什麼:crontab是linux操作系統中實現定時任務的程序,它能夠定時執行與系統預設時間相符的指定任務。 2、crontab的使用場…

    編程 2025-04-25
  • Vim使用教程詳細指南

    一、Vim使用教程 Vim是一個高度可定製的文本編輯器,可以在Linux,Mac和Windows等不同的平台上運行。它具有快速移動,複製,粘貼,查找和替換等強大功能,尤其在面對大型…

    編程 2025-04-25
  • 網站測試工具的詳細闡述

    一、測試工具的概述 在軟體開發的過程中,測試工具是一個非常重要的環節。測試工具可以快速、有效地檢測軟體中的缺陷,提高軟體的質量和穩定性。與此同時,測試工具還可以提高軟體開發的效率,…

    編程 2025-04-25

發表回復

登錄後才能評論