如何使用SpringSecurityOAuth實(shí)現(xiàn)OAuth2.0授權(quán)-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)如何使用Spring Security OAuth實(shí)現(xiàn)OAuth 2.0授權(quán),小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

10多年的武進(jìn)網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整武進(jìn)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“武進(jìn)網(wǎng)站設(shè)計(jì)”,“武進(jìn)網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

OAuth 2.0 是一種工業(yè)級(jí)的授權(quán)協(xié)議。OAuth 2.0是從創(chuàng)建于2006年的OAuth 1.0繼承而來(lái)的。OAuth 2.0致力于幫助開(kāi)發(fā)者簡(jiǎn)化授權(quán)并為web應(yīng)用、桌面應(yīng)用、移動(dòng)應(yīng)用、嵌入式應(yīng)用提供具體的授權(quán)流程。

OAuth 2.0 is the industry-standard protocol for authorization. OAuth 2.0 supersedes the work done on the original OAuth protocol created in 2006. OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices.

OAuth 2.0的四個(gè)角色

為了方便理解,以常用的 使用微信登錄 為例

Resource Owner

資源擁有者,對(duì)應(yīng)微信的每個(gè)用戶微信上設(shè)置的個(gè)人信息是屬于每個(gè)用戶的,不屬于騰訊。

Resource Server

資源服務(wù)器,一般就是用戶數(shù)據(jù)的一些操作(增刪改查)的REST API,比如微信的獲取用戶基本信息的接口。

Client Application

第三方客戶端,對(duì)比微信中就是各種微信公眾號(hào)開(kāi)發(fā)的應(yīng)用,第三方應(yīng)用經(jīng)過(guò) 認(rèn)證服務(wù)器 授權(quán)后即可訪問(wèn) 資源服務(wù)器 的REST API來(lái)獲取用戶的頭像、性別、地區(qū)等基本信息。

Authorization Server

認(rèn)證服務(wù)器,驗(yàn)證第三方客戶端是否合法。如果合法就給客戶端頒布token,第三方通過(guò)token來(lái)調(diào)用資源服務(wù)器的API。

四種授權(quán)方式(Grant Type)

anthorization_code

授權(quán)碼類型,適用于Web Server Application。模式為:客戶端先調(diào)用 /oauth/authorize/ 進(jìn)到用戶授權(quán)界面,用戶授權(quán)后返回 code ,客戶端然后根據(jù)code和 appSecret 獲取 access token 。

implicit簡(jiǎn)化類型,相對(duì)于授權(quán)碼類型少了授權(quán)碼獲取的步驟??蛻舳藨?yīng)用授權(quán)后認(rèn)證服務(wù)器會(huì)直接將access token放在客戶端的url??蛻舳私馕鰑rl獲取token。這種方式其實(shí)是不太安全的,可以通過(guò) https安全通道 和 縮短access token的有效時(shí)間 來(lái)較少風(fēng)險(xiǎn)。

password

密碼類型,客戶端應(yīng)用通過(guò)用戶的username和password獲access token。適用于資源服務(wù)器、認(rèn)證服務(wù)器與客戶端具有完全的信任關(guān)系,因?yàn)橐獙⒂脩粢獙⒂脩舻挠脩裘艽a直接發(fā)送給客戶端應(yīng)用,客戶端應(yīng)用通過(guò)用戶發(fā)送過(guò)來(lái)的用戶名密碼獲取token,然后訪問(wèn)資源服務(wù)器資源。比如支付寶就可以直接用淘寶用戶名和密碼登錄,因?yàn)樗鼈儗儆谕患夜荆舜?充分信任 。

client_credentials

客戶端類型,是不需要用戶參與的一種方式,用于不同服務(wù)之間的對(duì)接。比如自己開(kāi)發(fā)的應(yīng)用程序要調(diào)用短信驗(yàn)證碼服務(wù)商的服務(wù),調(diào)用地圖服務(wù)商的服務(wù)、調(diào)用手機(jī)消息推送服務(wù)商的服務(wù)。當(dāng)需要調(diào)用服務(wù)是可以直接使用服務(wù)商給的 appID 和 appSecret 來(lái)獲取token,得到token之后就可以直接調(diào)用服務(wù)。

其他概念

  1. scope :訪問(wèn)資源服務(wù)器的哪些作用域。

  2. refresh token :當(dāng)access token 過(guò)期后,可以通過(guò)refresh token重新獲取access token。

實(shí)現(xiàn)

有的時(shí)候資源服務(wù)器和認(rèn)證服務(wù)器是兩個(gè)不同的應(yīng)用,有的時(shí)候資源服務(wù)器和認(rèn)證服務(wù)器在通一個(gè)應(yīng)用中,不同之處在于資源服務(wù)器是否需要檢查token的有效性,前者需要檢查,后者不需要。這里實(shí)現(xiàn)后者。

Application的安全配置

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.formLogin()
        .and().csrf().disable()
        .authorizeRequests().anyRequest().authenticated();
  }

  @Override
  public void configure(WebSecurity web) throws Exception {
    super.configure(web);
  }

  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication().withUser("lyt").password("lyt").authorities("ROLE_USER")
        .and().withUser("admin").password("admin").authorities("ROLE_ADMIN");
  }

  @Bean
  @Override
  public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
  }
}

認(rèn)證服務(wù)器配置

@EnableAuthorizationServer
@Configuration
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

  @Override
  public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients.inMemory().withClient("client")
        .scopes("read","write")
        .secret("secret")
        .authorizedGrantTypes("authorization_code","password","implicit","client_credentials");}

  @Override
  public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
    super.configure(security);
  }

  @Override
  public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    endpoints.authenticationManager(authenticationManager);
  }

  @Autowired
  @Qualifier("authenticationManagerBean")
  private AuthenticationManager authenticationManager;
}

資源服務(wù)器配置

@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableResourceServer
@Configuration
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
 @Override
 public void configure(HttpSecurity http) throws Exception {
 http.antMatcher("/oauth3/api/**").authorizeRequests()
  .antMatchers(HttpMethod.GET, "/read/**").access("#oauth3.hasScope('read')")
  .antMatchers(HttpMethod.POST, "/write/**").access("#oauth3.hasScope('write')")
  .antMatchers(HttpMethod.PUT, "/write/**").access("#oauth3.hasScope('write')")
  .antMatchers(HttpMethod.DELETE, "/write/**").access("#oauth3.hasScope('write')");
 }

}

資源服務(wù)器 filter-order 設(shè)置

需要在 application.yml 中將filter-order設(shè)置成3,具體原因參考鏈接

防止cookie沖突

為了避免認(rèn)證服務(wù)器的cookie和客戶端的cookie沖突,出現(xiàn)錯(cuò)誤,最好修改 cookie name 或者設(shè)置 contextPath 。

測(cè)試

postman 中提供OAuth 2.0的認(rèn)證方式,可以獲取到token之后再把認(rèn)證加入http請(qǐng)求中,即可請(qǐng)求資源服務(wù)器的REST API

客戶端信息

如何使用Spring Security OAuth實(shí)現(xiàn)OAuth 2.0授權(quán)

授權(quán)

如何使用Spring Security OAuth實(shí)現(xiàn)OAuth 2.0授權(quán)

獲取的token

如何使用Spring Security OAuth實(shí)現(xiàn)OAuth 2.0授權(quán)

訪問(wèn)資源服務(wù)器API

如何使用Spring Security OAuth實(shí)現(xiàn)OAuth 2.0授權(quán)

關(guān)于“如何使用Spring Security OAuth實(shí)現(xiàn)OAuth 2.0授權(quán)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

分享名稱:如何使用SpringSecurityOAuth實(shí)現(xiàn)OAuth2.0授權(quán)-創(chuàng)新互聯(lián)
URL標(biāo)題:http://www.muchs.cn/article4/dsjeoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、App設(shè)計(jì)手機(jī)網(wǎng)站建設(shè)、ChatGPT、小程序開(kāi)發(fā)、全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司