java oauth2.0_OAuth 2.0 Java指南:5分钟保护您的应用程序安全
java oauth2.0
使用Okta的身份管理平臺輕松部署您的應(yīng)用程序 使用Okta的API在幾分鐘之內(nèi)即可對任何應(yīng)用程序中的用戶進(jìn)行身份驗(yàn)證,管理和保護(hù)。 今天嘗試Okta。
現(xiàn)代應(yīng)用程序依賴于用戶身份驗(yàn)證,但是它可能給Java開發(fā)人員帶來困難的挑戰(zhàn),以及一系列特定于框架的選項供您選擇。 我們已經(jīng)看到許多Spring開發(fā)人員從一個簡單的本地身份驗(yàn)證服務(wù)開始,他們計劃用一個更強(qiáng)大的選項替換“后來的”……只是為了讓該本地服務(wù)將其方式擴(kuò)展到堆棧中的永久位置。 為了結(jié)束這一令人心碎的循環(huán),這篇文章將展示即使在一個簡單的應(yīng)用程序中,實(shí)現(xiàn)企業(yè)級身份驗(yàn)證服務(wù)也是如此簡單。
在本教程中,您將創(chuàng)建一個顯示用戶信息的應(yīng)用程序。 您將首先手動配置它,以查看其缺點(diǎn)。 然后,我們將使用更專業(yè)的方法。 在本教程結(jié)束時,您將擁有一個基于Spring的Java應(yīng)用程序,該應(yīng)用程序使用OAuth 2.0對用戶進(jìn)行身份驗(yàn)證,并且需要5分鐘的時間進(jìn)行這些更改!
使用Spring創(chuàng)建Java應(yīng)用程序
讓我們從創(chuàng)建項目結(jié)構(gòu)開始。 您將使用Spring Initializer創(chuàng)建應(yīng)用程序。 轉(zhuǎn)到start.spring.io并填寫以下信息:
- 項目: Maven項目
- 語言: Java
- 組: com.okta.authorizationapp
- 工件: oauth
-  依存關(guān)系: - Spring網(wǎng)
 
您也可以從命令行生成項目。 將以下命令粘貼到終端中,以使用與上述相同的配置下載項目:
curl https://start.spring.io/starter.zip \-d dependencies=web,thymeleaf,security \-d packageName=com.okta.authorizationapp \-d name=authorization-app \-d type=maven-project \-o java-authorization-app.zip而已! 現(xiàn)在,您的Java項目結(jié)構(gòu)已創(chuàng)建,您可以開始開發(fā)應(yīng)用程序了。
自行構(gòu)建用戶安全性
本教程將使用Maven,但您可以根據(jù)需要輕松使用Gradle進(jìn)行操作。
首先,將項目導(dǎo)入您喜歡的IDE /編輯器中。 現(xiàn)在,您的項目只有一個類,即引導(dǎo)應(yīng)用程序的style="font-size:13px" class="highlighter-rouge">AuthorizationAppApplication 。 運(yùn)行此類時,服務(wù)器將啟動,并且可以轉(zhuǎn)到瀏覽器以查看結(jié)果。
但是,您首先需要一個頁面才能訪問,因此讓我們創(chuàng)建一個主頁。
內(nèi)部style="font-size:13px" class="highlighter-rouge">src/main/java/com/okta/authorizationapp/controller/創(chuàng)建類style="font-size:13px" class="highlighter-rouge">HomeController :
@Controller public class HomeController {private Map<String, LocalDateTime> usersLastAccess = new HashMap<>();@GetMapping("/")public String getCurrentUser(@AuthenticationPrincipal User user, Model model) {String username = user.getUsername();model.addAttribute("username", username);model.addAttribute("lastAccess", usersLastAccess.get(username));usersLastAccess.put(username, LocalDateTime.now());return "home";} }此類定義了/路徑的控制器。 當(dāng)您在未定義任何其他路徑的情況下訪問應(yīng)用程序時,將執(zhí)行此代碼。
控制器的第一個重要操作將檢索當(dāng)前用戶的信息。 由于您使用AuthenticationPrincipal注釋了user屬性,因此Spring Security將自動檢索此信息。
控制器還接收一個model參數(shù),該參數(shù)存儲用于呈現(xiàn)頁面的數(shù)據(jù)。 現(xiàn)在,此數(shù)據(jù)是username和用戶上次訪問您的應(yīng)用程序的時間。
在用戶登錄時創(chuàng)建動態(tài)消息
最后一步是更新用戶的上次訪問日期,并定義應(yīng)呈現(xiàn)請求HTML模板。 在您的情況下,端點(diǎn)稱為home 。 Spring將在src/main/resources/templates文件夾中搜索home.html文件。
您還沒有此文件,所以讓我們?nèi)?chuàng)建它:
<html><head><title>Java OAuth 2.0 Tutorial - Homepage</title></head><body><h1 th:text="'Welcome, ' + ${username} + '!'"></h1><ul><li th:if="${lastAccess}" th:text="'Last access: ' + ${lastAccess}"></li></ul></body> </html>這是一個HTML文件,由Thymeleaf稍作更改, Thymeleaf是您在創(chuàng)建項目時導(dǎo)入的庫之一。 Thymeleaf從服務(wù)器接收模型對象,并以HTML呈現(xiàn)該對象的值。 只需鍵入${variable}即可引用model對象中的變量。
通過th:text屬性,您可以在HTML元素中定義動態(tài)文本。 在這里,我們使用它來顯示動態(tài)問候語,以及用戶上次訪問該應(yīng)用程序的時間。
用戶首次訪問您的應(yīng)用時,不會記錄任何先前的訪問。 為了確保您不會出現(xiàn)無意義的字段,請使用th:if 。 如果該字段為null ,則不會呈現(xiàn)li標(biāo)簽,并且用戶將看不到它。
將基本登錄添加到Java Spring應(yīng)用程序
現(xiàn)在有了端點(diǎn),您只需要為應(yīng)用程序添加安全性即可。
在src/main/javacom/okta/authorizationapp/configuration/創(chuàng)建類SecurityConfiguration :
@EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter {private PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().passwordEncoder(passwordEncoder()).withUser("john.doe").password(passwordEncoder().encode("secret")).roles("USER");}@Beanpublic PasswordEncoder passwordEncoder() {return passwordEncoder;} }此類將確保用戶必須登錄才能訪問您的應(yīng)用程序。 目前只有一個名為john.doe用戶可以登錄該應(yīng)用程序。
通過調(diào)用AuthorizationAppApplication內(nèi)部的main方法來運(yùn)行應(yīng)用程序。 您也可以從命令行運(yùn)行它。 在項目文件夾中,運(yùn)行以下命令:
mvn spring-boot:run當(dāng)您訪問http://localhost:8080 ,應(yīng)該看到以下登錄頁面:
鍵入john.doe和secret作為用戶名和密碼。 您應(yīng)該被重定向到主頁。 第一次訪問時,只有Welcome, john.doe! 將顯示。 在第二次訪問中,您還應(yīng)該看到最后一次訪問:
現(xiàn)在,您有了一個管理安全性的應(yīng)用程序。 做得好!
但是,有一個大問題……現(xiàn)在您只能以一個用戶身份登錄。 更糟糕的是,用戶信息被硬編碼在您的應(yīng)用程序中。 為了簡化用戶訪問和安全性,您可以使用Okta來管理身份驗(yàn)證。 它將在5分鐘內(nèi)為您提供一種非常簡單的方法來與OAuth 2.0集成。 讓我們在示例應(yīng)用中配置OAuth 2.0,以了解它的簡易性。 首先創(chuàng)建一個Okta帳戶。
創(chuàng)建一個Okta帳戶
如果您沒有Okta帳戶, 請繼續(xù)創(chuàng)建一個 。 注冊后,請執(zhí)行以下步驟:
- 登錄到您的帳戶
- 單擊應(yīng)用程序 > 添加應(yīng)用程序
您將被重定向到以下頁面:
- 選擇網(wǎng)站 ,然后單擊下一步。
在表格中填寫以下選項:
- 名稱: hello-world
- 基本URI: http://localhost:8080
- 登錄重定向URL: http://localhost:8080/login/oauth2/code/okta
-  允許的授予類型: - 客戶憑證
 
- 單擊完成 。
現(xiàn)在,您可以使用Okta應(yīng)用程序?qū)?yīng)用程序的用戶進(jìn)行身份驗(yàn)證。
使用OAuth 2.0:一種快速,專業(yè)的方法
首先,將Okta的庫添加到您的項目中。
轉(zhuǎn)到pom.xml并添加Okta的Spring Boot啟動器:
<dependency><groupId>com.okta.spring</groupId><artifactId>okta-spring-boot-starter</artifactId><version>1.3.0</version> </dependency>Okta將管理您的應(yīng)用程序身份驗(yàn)證,因此您可以刪除SecurityConfiguration類。
在HomeController ,進(jìn)行以下更改:
@GetMapping("/") public String getCurrentUser(@AuthenticationPrincipal OidcUser user, Model model) {String email = user.getEmail();model.addAttribute("email", email);model.addAttribute("lastAccess", usersLastAccess.get(email));model.addAttribute("firstName", user.getGivenName());model.addAttribute("lastName", user.getFamilyName());usersLastAccess.put(email, LocalDateTime.now());return "home"; }您的端點(diǎn)現(xiàn)在將收到與OAuth 2.0兼容的OidcUser 。 此類提供了比以前更多的用戶信息,因此您可以修改HTML以顯示它。 用email替換username ,并添加firstName和lastName ,這是您之前沒有的字段。 為此,請轉(zhuǎn)到hello.html并進(jìn)行以下更改:
<body><h1 th:text="'Welcome, ' + ${email} + '!'"></h1><ul><li th:if="${lastAccess}" th:text="'Last access: ' + ${lastAccess}"></li><li th:if="${firstName}" th:text="'First name: ' + ${firstName}"></li><li th:if="${lastName}" th:text="'Last name: ' + ${lastName}"></li></ul> </body>您仍然像以前一樣向用戶打招呼,但同時還顯示來自端點(diǎn)的新信息。 您已經(jīng)對所有代碼進(jìn)行了更改,現(xiàn)在只需要添加一些配置即可。 使用以下環(huán)境變量在應(yīng)用程序的根目錄中創(chuàng)建okta.env文件。
export OKTA_OAUTH2_ISSUER=https://{yourOktaDomain}/oauth2/default export OKTA_OAUTH2_CLIENT_ID={CLIENT_ID} export OKTA_OAUTH2_CLIENT_SECRET={CLIENT_SECRET}您可以從Okta信息中心的應(yīng)用程序頁面中找到{CLIENT_ID}和{CLIENT_SECRET} 。 要訪問它,請按照以下步驟操作:
- 在您的Okta儀表板中,轉(zhuǎn)到“ 應(yīng)用程序”
- 選擇hello-world應(yīng)用程序
- 單擊常規(guī)選項卡
您應(yīng)該在“客戶端憑據(jù)”區(qū)域中看到兩個值。 您的{yourOktaDomain}將顯示在Okta儀表板中,只需單擊菜單中的“ 儀表板 ”即可。 您將在右上角看到組織URL。
將這些值粘貼到okta.env ,運(yùn)行以下命令以啟動應(yīng)用程序。
source okta.env mvn spring-boot:run而已!
啟用OAuth 2.0登錄到您的Spring應(yīng)用程序
導(dǎo)航到http://localhost:8080 。 您的應(yīng)用程序會將您重定向到Okta的登錄頁面:
登錄后,您將被重定向到您的應(yīng)用程序,并看到以下消息:
你完成了! 在5分鐘內(nèi),您只需很少的配置即可在應(yīng)用程序中添加OAuth 2.0。
了解有關(guān)Spring安全性,Spring Boot和Java身份驗(yàn)證的更多信息
如果要查看完整的源代碼,可以在GitHub上訪問它。
您是否想全面了解OAuth 2.0和Java? 您可能對以下文章感興趣:
- Spring Boot登錄選項快速指南
- 具有PreAuthorize的Spring方法安全性
- 使用Spring Boot Actuator監(jiān)視Java應(yīng)用程序
有關(guān)此類文章的更多信息, 請在Twitter上關(guān)注@oktadev 。 我們還會定期將截屏視頻發(fā)布到我們的YouTube頻道 。
使用Okta的身份管理平臺輕松部署您的應(yīng)用程序 使用Okta的API在幾分鐘之內(nèi)即可對任何應(yīng)用程序中的用戶進(jìn)行身份驗(yàn)證,管理和保護(hù)。 今天嘗試Okta。
翻譯自: https://www.javacodegeeks.com/2019/12/oauth-2-0-java-guide-secure-your-app-in-5-minutes.html
java oauth2.0
總結(jié)
以上是生活随笔為你收集整理的java oauth2.0_OAuth 2.0 Java指南:5分钟保护您的应用程序安全的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: ai怎么做霓虹灯效果(ai做霓虹灯效果线
- 下一篇: ai字体背景颜色怎么改变(ai字体背景颜
