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