javascript
okta-spring_通过Okta的单点登录保护Spring Boot Web App的安全
okta-spring
“我喜歡編寫身份驗證和授權代碼。” ?從來沒有Java開發人員。 厭倦了一次又一次地建立相同的登錄屏幕? 嘗試使用Okta API進行托管身份驗證,授權和多因素身份驗證。
您可以使用SpringBoot和Okta在不到20分鐘的時間內啟動具有完整用戶身份和授權管理的企業級REST服務器。 Spring Boot及其Starter軟件包提供了可用于生產的Tomcat服務器,Okta使用OAuth保護您的API。
本教程將引導您完成整個過程。 Okta在線后,只需幾行代碼和配置就可以輕松添加功能齊全的客戶端身份驗證和用戶管理功能! 同樣在本教程中,我將向您展示安全的Spring Boot服務器如何能夠將Web內容或作為后端API進行服務,但僅向已向您注冊的用戶提供。 準備? 我們走吧!
Spring Boot和Okta入門
從零到安全的Web服務器不會一flash而就。 要完成此項目,您將:
- 使用Spring Initializr下載全新的Spring Boot入門項目
- 創建一個新的Okta帳戶并訪問您的管理儀表板
- 添加幾行代碼并進行配置
- 請參閱新服務器上的單點登錄操作!
為什么是春天?
Spring是一套成熟,使用廣泛且有據可查的工具和庫,旨在幫助您簡化Java開發人員的生活。 它提供了大量功能,從簡單的數據庫連接和服務器創建(如我們在本教程中將看到的)到交鑰匙安全性,消息傳遞,移動開發等。
Spring Boot是Spring的一個子項目,專注于使其快速,輕松地引導新的Spring應用程序。 它的主要吸引力之一是它不需要亂糟糟的配置文件(關于早期Spring生態系統的常見抱怨)。 正如我們將很快看到的,使用一些簡單的注釋和Maven依賴關系將使我們在幾分鐘之內從零遷移到安全的Web服務器。
下載并初始化新的Spring Boot項目
Spring提供了一個名為Spring Initializr的工具,使您可以單擊創建并下載一個包含新Spring Boot項目的zip文件。 前往該處并創建一個包含Web和Security入門程序的新項目。 我保留了默認的工件和組,并在我的主目錄中demo.zip壓縮了demo.zip文件。 解壓縮了以下文件:
那些熟悉Maven的人會認識到pom.xml文件。 僅有四個小依賴項從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>在獲得有趣的東西之前,請通過以下方式運行服務器,以確保一切正常:
./mvnw spring-boot:run在所有豐富多彩的日志語句中,要查找的語句可能倒數第二:
Tomcat started on port(s): 8080 (http)
因為在創建項目時請求了Spring Security Starter軟件包,所以默認情況下,使用Basic Authentication來保護服務器。 可以通過打開瀏覽器并訪問來驗證這一點:
將出現一個瀏覽器對話框,詢問您的用戶名和密碼(尚未設置):
不必費心在新服務器中設置硬編碼的用戶名和密碼,突然訪問完整的OAuth會話管理,用戶管理,站點統計信息等等是否更好? 我們可以在Okta的短短幾分鐘內做到這一點!
使用Okta將OAuth身份驗證添加到您的服務器
現在是時候通過用戶管理,密鑰和憑據的存儲和循環,OAuth服務器維護,忘記的密碼處理以及精巧的管理UI來增強服務器。 這聽起來像很多工作! 幸運的是,Okta的用戶管理和授權服務已為您完成了此工作。 您只需將Okta依賴項插入到Spring Boot項目中,配置一些安全性設置,然后只需幾個簡單的步驟即可獲得所有這些安全性和一攬子芯片。 這是如何做。
獲取您的Okta憑證
如果您是Okta的新手,可以在這里注冊一個免費的開發人員帳戶。 您會收到一封邀請電子郵件,其中包含您的用戶名(您的電子郵件地址)和一個臨時密碼。 按照電子郵件中提供的鏈接,使用這些憑據登錄,并首次創建您的管理員帳戶。 將要求您創建一個新密碼,并在完成此頁面后,您將找到Okta開發人員控制臺。 這里有很多值得探索的地方,因此,如果您愿意,可以休息一下并四處瀏覽!
準備好繼續時,請轉到Okta儀表板中的“ 應用程序”選項卡。 它看起來應該像這樣:
單擊綠色的“ 添加應用程序”按鈕,由于要構建Web服務器,因此選擇Web (.NET,Java等)作為應用程序類型,然后單擊“ 下一步” :
在隨后的設置頁面中,有一個默認值可以更改。 在“ 登錄重定向URI”字段中,將默認值替換為:
http://localhost:8080/login
然后,點擊完成 。 這會將您帶入新應用程序的基礎。 這里也有很多功能,但是現在您需要在儀表板“ 應用程序”主選項卡的“ 常規”子選項卡中記下一些信息。 前兩個是位于頁面底部附近的客戶端ID和客戶端密鑰 :
請妥善保管并確保安全! 您將在Spring Boot服務器中使用它們來通過Okta進行身份驗證。
接下來,轉到儀表板頂部的“ API”選項卡,然后在此屏幕中,注意Issuer URI 。 如果看不到,請確保您位于“ 授權服務器”子選項卡上。 這是您的服務器將與之通信的Okta OAuth授權服務器。
現在,您的Client ID , Client Secret和Issuer URI被安全地保存了; 是時候將Okta插入服務器了。 在pom.xml文件中添加Okta和Spring OAuth依賴項以及其他依賴項:
<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>接下來,將三個值添加到: 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所能提供的一切之前的最后一步-在您的服務器上使用它! 對于本文,目標是添加單點登錄身份驗證,以便只有向您注冊的用戶才能登錄到您的服務器并與其進行交互。 主應用程序類需要告訴Okta客戶端庫啟用單點登錄,這是通過在主應用程序類中添加以下注釋來實現的: src/main/java/com/example/demo/DemoApplication.java
@EnableOAuth2Sso在進行此操作時,不妨添加一個終結點,該終結點將對我們將要獲得的新用戶信息起作用。 您可以通過以下方式修飾主應用程序類的能力:
@RestControllerOkta通過java.security.Principal接口提供調用者的用戶ID。 默認情況下,這是用戶的電子郵件地址。 您可以添加一個回顯用戶電子郵件地址的請求處理程序,如下所示:
@GetMapping("/") public String echoTheUsersEmailAddress(Principal principal) {return "Hey there! Your email address is: " + principal.getName(); }使用新的導入,注釋和請求處理程序,主DemoApplication.java應如下所示:
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();} }當您通過./mvnw spring-boot:run重新啟動服務器并在瀏覽器中訪問http://localhost:8080時,您將被帶到個人的Okta子域進行登錄:
您可以使用創建Okta帳戶時設置的電子郵件和密碼登錄,因為默認情況下您是作為“我的Web應用程序” Okta應用程序中的用戶添加的。 除非您在管理控制臺中重新創建了新用戶,否則這是唯一被授予訪問您網站權限的用戶。
登錄后,您將以經過身份驗證的用戶身份重定向回您的站點,并且應該會看到您的電子郵件地址已回顯給您!
下一步是什么?
現在,當您為應用創建或注冊新用戶時,真正的樂趣就開始了! 花一些時間嘗試不同的權限級別。 檢查審核日志以查看您的用戶的活動。 將用戶添加到組,以及自定義和控制電子郵件和短信通信。
有興趣了解更多嗎? 查看以下其他Java資源:
- 我們的Java產品文檔
- 使用Spring Boot和OAuth保護您的SPA
- 使用Spring Security和Thymeleaf向您的應用程序添加基于角色的訪問控制
如果您對此內容或我們的任何其他內容有疑問(或只是想聊天!),請在Twitter @OktaDev上與我們聯系 。 我們很樂意聽取您的意見!
“我喜歡編寫身份驗證和授權代碼。” ?從來沒有Java開發人員。 厭倦了一次又一次地建立相同的登錄屏幕? 嘗試使用Okta API進行托管身份驗證,授權和多因素身份驗證。
在15分鐘內將Single Sign-on添加到您的Spring Boot Web App中最初于2017年11月20日發布在Okta開發人員博客上。
翻譯自: https://www.javacodegeeks.com/2018/01/secure-spring-boot-web-app-single-sign-okta.html
okta-spring
總結
以上是生活随笔為你收集整理的okta-spring_通过Okta的单点登录保护Spring Boot Web App的安全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java api 开发_Java开发人员
- 下一篇: 理想汽车“进疆轮胎服务”正式上线,涵盖乌