javascript
通过Okta的单点登录保护Spring Boot Web App的安全
“我喜歡編寫身份驗(yàn)證和授權(quán)代碼?!??從來沒有Java開發(fā)人員。 厭倦了一次又一次地建立相同的登錄屏幕? 嘗試使用Okta API進(jìn)行托管身份驗(yàn)證,授權(quán)和多因素身份驗(yàn)證。
您可以使用SpringBoot和Okta在不到20分鐘的時(shí)間內(nèi)啟動(dòng)具有完整用戶身份和授權(quán)管理的企業(yè)級(jí)REST服務(wù)器。 Spring Boot及其Starter軟件包提供了可用于生產(chǎn)的Tomcat服務(wù)器,Okta使用OAuth保護(hù)您的API。
本教程將引導(dǎo)您完成整個(gè)過程。 Okta在線后,只需幾行代碼和配置就可以輕松添加功能齊全的客戶端身份驗(yàn)證和用戶管理! 同樣在本教程中,我將向您展示安全的Spring Boot服務(wù)器如何能夠?qū)eb內(nèi)容或用作后端API,但僅向已向您注冊(cè)的用戶提供。 準(zhǔn)備? 我們走吧!
Spring Boot和Okta入門
從零到安全的Web服務(wù)器不會(huì)一flash而就。 要完成此項(xiàng)目,您將:
- 使用Spring Initializr下載全新的Spring Boot入門項(xiàng)目
- 創(chuàng)建一個(gè)新的Okta帳戶并訪問您的管理儀表板
- 添加幾行代碼并進(jìn)行配置
- 請(qǐng)參閱在新服務(wù)器上運(yùn)行的單點(diǎn)登錄!
為什么是春天?
Spring是一套成熟,使用廣泛且文檔齊全的工具和庫,旨在使您成為Java開發(fā)人員更加輕松。 它提供了大量功能,從簡(jiǎn)單的數(shù)據(jù)庫連接和服務(wù)器創(chuàng)建(如我們?cè)诒窘坛讨袑⒖吹降?#xff09;到交鑰匙安全性,消息傳遞,移動(dòng)開發(fā)等。
Spring Boot是Spring的一個(gè)子項(xiàng)目,致力于使超快速和輕松地引導(dǎo)新的Spring應(yīng)用程序成為可能。 它的主要吸引力之一是它不需要亂糟糟的配置文件(關(guān)于早期Spring生態(tài)系統(tǒng)的常見抱怨)。 正如我們將很快看到的,使用一些簡(jiǎn)單的注釋和Maven依賴關(guān)系將使我們?cè)趲追昼娭畠?nèi)從零遷移到安全的Web服務(wù)器。
下載并初始化新的Spring Boot項(xiàng)目
Spring提供了一個(gè)名為Spring Initializr的工具,使您可以單擊創(chuàng)建并下載一個(gè)包含新Spring Boot項(xiàng)目的zip文件。 轉(zhuǎn)至該處并創(chuàng)建一個(gè)包含Web和Security入門程序的新項(xiàng)目。 我保留了默認(rèn)的工件和組,并在我的主目錄中demo.zip壓縮了demo.zip文件。 解壓縮了以下文件:
那些熟悉Maven的人會(huì)認(rèn)識(shí)到pom.xml文件。 僅有四個(gè)小依賴項(xiàng)從Spring中引入了大量功能:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope> </dependency> <dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-test</artifactId><scope>test</scope> </dependency>在獲得有趣的東西之前,請(qǐng)通過以下方式運(yùn)行服務(wù)器,以確保一切正常
./mvnw spring-boot:run在所有豐富多彩的日志語句中,要查找的語句可能倒數(shù)第二:
Tomcat started on port(s): 8080 (http)
因?yàn)樵趧?chuàng)建項(xiàng)目時(shí)請(qǐng)求了Spring Security Starter軟件包,所以默認(rèn)情況下,使用Basic Authentication來保護(hù)服務(wù)器。 可以通過打開瀏覽器并訪問以下命令來驗(yàn)證這一點(diǎn):
將出現(xiàn)一個(gè)瀏覽器對(duì)話框,詢問您的用戶名和密碼(尚未設(shè)置):
不用費(fèi)心在新服務(wù)器中設(shè)置硬編碼的用戶名和密碼,突然訪問完整的OAuth會(huì)話管理,用戶管理,站點(diǎn)統(tǒng)計(jì)信息等等是否更好? 我們可以在Okta的短短幾分鐘內(nèi)做到這一點(diǎn)!
使用Okta將OAuth身份驗(yàn)證添加到您的服務(wù)器
現(xiàn)在是時(shí)候通過用戶管理,密鑰和憑據(jù)存儲(chǔ)和輪換,OAuth服務(wù)器維護(hù),忘記的密碼處理以及精巧的管理UI來增強(qiáng)服務(wù)器。 這聽起來很麻煩! 幸運(yùn)的是,使用Okta的用戶管理和授權(quán)服務(wù)已為您完成了此工作。 您只需將Okta依賴項(xiàng)插入到Spring Boot項(xiàng)目中,配置一些安全性設(shè)置,然后只需幾個(gè)簡(jiǎn)單的步驟即可獲得所有這些安全性和一攬子籌碼。 就是這樣。
獲取您的Okta憑證
如果您是Okta的新手,可以在這里注冊(cè)一個(gè)免費(fèi)的開發(fā)者帳戶。 您會(huì)收到一封邀請(qǐng)電子郵件,其中包含您的用戶名(您的電子郵件地址)和一個(gè)臨時(shí)密碼。 按照電子郵件中提供的鏈接,使用這些憑據(jù)登錄,并首次創(chuàng)建您的管理員帳戶。 將要求您創(chuàng)建一個(gè)新密碼,并在完成此頁面后,您將找到Okta開發(fā)人員控制臺(tái)。 這里有很多值得探索的地方,因此,如果您愿意,可以休息一下并四處瀏覽!
準(zhǔn)備好繼續(xù)時(shí),請(qǐng)轉(zhuǎn)到Okta儀表板中的“ 應(yīng)用程序”選項(xiàng)卡。 它看起來應(yīng)該像這樣:
單擊綠色的“ 添加應(yīng)用程序”按鈕,由于要構(gòu)建Web服務(wù)器,因此選擇Web (.NET,Java等)作為應(yīng)用程序類型,然后單擊“ 下一步” :
在隨后的設(shè)置頁面中,有一個(gè)默認(rèn)值可以更改。 在“ 登錄重定向URI”字段中,將默認(rèn)值替換為:
http://localhost:8080/login
然后,點(diǎn)擊完成 。 這會(huì)將您帶入新應(yīng)用程序的基礎(chǔ)。 這里也有很多功能,但是現(xiàn)在您需要在儀表板“ 應(yīng)用程序”主選項(xiàng)卡的“ 常規(guī)”子選項(xiàng)卡中記下一些信息。 前兩個(gè)是位于頁面底部附近的客戶端ID和客戶端密鑰 :
請(qǐng)妥善保管并確保安全! 您將在Spring Boot服務(wù)器中使用它們來通過Okta進(jìn)行身份驗(yàn)證。
接下來,轉(zhuǎn)到儀表板頂部的“ API”選項(xiàng)卡,然后在此屏幕中,注意Issuer URI 。 如果看不到,請(qǐng)確保您位于“ 授權(quán)服務(wù)器”子選項(xiàng)卡上。 這是您的服務(wù)器將與之通信的Okta OAuth授權(quán)服務(wù)器。
現(xiàn)在,您的Client ID , Client Secret和Issuer URI被安全地保存了; 是時(shí)候?qū)kta插入服務(wù)器了。 在pom.xml文件中添加Okta和Spring OAuth依賴項(xiàng)以及其他依賴項(xiàng):
<dependency><groupId>com.okta.spring</groupId><artifactId>okta-spring-boot-starter</artifactId><version>0.2.0</version> </dependency> <dependency><groupId>org.springframework.security.oauth</groupId><artifactId>spring-security-oauth2</artifactId><version>2.2.0.RELEASE</version> </dependency>接下來,將三個(gè)值添加到: src/main/resources/application.properties
okta.oauth2.issuer=(your **Issuer URI**) okta.oauth2.clientId=(your **Client ID**) okta.oauth2.clientSecret=(your **Client Secret**)像這樣:
okta.oauth2.issuer=https://dev-279161.oktapreview.com/oauth2/default okta.oauth2.clientId=0oacqif7do3e0hD0h7 okta.oauth2.clientSecret=(your **Client Secret**)在收獲Okta所能提供的一切之前的最后一步-在服務(wù)器上使用它! 對(duì)于本文,目標(biāo)是添加單點(diǎn)登錄身份驗(yàn)證,以便只有向您注冊(cè)的用戶才能登錄到您的服務(wù)器并與其進(jìn)行交互。 主應(yīng)用程序類需要告訴Okta客戶端庫啟用單點(diǎn)登錄,這是通過在主應(yīng)用程序類中添加以下注釋來實(shí)現(xiàn)的: src/main/java/com/example/demo/DemoApplication.java
@EnableOAuth2Sso在進(jìn)行此操作時(shí),不妨添加一個(gè)終結(jié)點(diǎn),該終結(jié)點(diǎn)將對(duì)我們將要獲得的新用戶信息起作用。 您可以通過以下方式裝飾主Application類:
@RestControllerOkta通過java.security.Principal接口提供調(diào)用者的用戶ID。 默認(rèn)情況下,這是用戶的電子郵件地址。 您可以添加一個(gè)與用戶的電子郵件地址相呼應(yīng)的請(qǐng)求處理程序,如下所示:
@GetMapping("/") public String echoTheUsersEmailAddress(Principal principal) {return "Hey there! Your email address is: " + principal.getName(); }使用新的導(dǎo)入,注釋和請(qǐng)求處理程序,主DemoApplication.java應(yīng)如下所示:
package com.example.demo;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.security.Principal;@RestController @EnableOAuth2Sso @SpringBootApplication public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@GetMapping("/")public String echoTheUsersEmailAddress(Principal principal) {return "Hey there! Your email address is: " + principal.getName();} }當(dāng)您通過./mvnw spring-boot:run重新啟動(dòng)服務(wù)器并在瀏覽器中訪問http://localhost:8080時(shí),您將被帶到個(gè)人的Okta子域進(jìn)行登錄:
您可以使用創(chuàng)建Okta帳戶時(shí)設(shè)置的電子郵件和密碼登錄,因?yàn)槟J(rèn)情況下您是作為“我的Web應(yīng)用程序” Okta應(yīng)用程序中的用戶添加的。 除非您在管理控制臺(tái)中重新創(chuàng)建了新用戶,否則這是唯一被授予訪問您網(wǎng)站權(quán)限的用戶。
登錄后,您將以經(jīng)過身份驗(yàn)證的用戶身份重定向回您的站點(diǎn),并且應(yīng)該會(huì)看到您的電子郵件地址已回顯給您!
下一步是什么?
現(xiàn)在,當(dāng)您為應(yīng)用創(chuàng)建或注冊(cè)新用戶時(shí),真正的樂趣就開始了! 花一些時(shí)間嘗試不同的權(quán)限級(jí)別。 查看審核日志以查看您的用戶的活動(dòng)。 將用戶添加到組,并自定義和控制電子郵件和短信通信。
有興趣了解更多嗎? 查看以下其他Java資源:
- 我們的Java產(chǎn)品文檔
- 使用Spring Boot和OAuth保護(hù)您的SPA
- 使用Spring Security和Thymeleaf向您的應(yīng)用程序添加基于角色的訪問控制
如果您對(duì)此內(nèi)容或我們的任何其他內(nèi)容有疑問(或只是想聊天!),請(qǐng)?jiān)赥witter @OktaDev上與我們聯(lián)系 。 我們很樂意聽取您的意見!
“我喜歡編寫身份驗(yàn)證和授權(quán)代碼。” ?從來沒有Java開發(fā)人員。 厭倦了一次又一次地建立相同的登錄屏幕? 嘗試使用Okta API進(jìn)行托管身份驗(yàn)證,授權(quán)和多因素身份驗(yàn)證。
在15分鐘內(nèi)將Single Sign-on添加到您的Spring Boot Web App中最初于2017年11月20日發(fā)布在Okta開發(fā)人員博客上。
翻譯自: https://www.javacodegeeks.com/2018/01/secure-spring-boot-web-app-single-sign-okta.html
總結(jié)
以上是生活随笔為你收集整理的通过Okta的单点登录保护Spring Boot Web App的安全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux驱动串口(linux 驱动串口
- 下一篇: Spring Data Solr教程:将