亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

在開(kāi)發(fā)應(yīng)用程序時(shí),通常只有一臺(tái)資源服務(wù)器為多個(gè)客戶(hù)端應(yīng)用程序提供數(shù)據(jù)。盡管這些應(yīng)用程序可能具有相似的用戶(hù),但它們可能具有執(zhí)行所需的不同權(quán)限。設(shè)想一種情況,其中第一個(gè)應(yīng)用程序的一部分用戶(hù)應(yīng)有權(quán)訪(fǎng)問(wèn)第二個(gè)應(yīng)用程序(以管理控制臺(tái)應(yīng)用程序與客戶(hù)端或用戶(hù)應(yīng)用程序相對(duì)應(yīng));您將如何執(zhí)行此操作?

在本文中,我將向您展示如何使用Okta和Spring Boot通過(guò)兩個(gè)客戶(hù)端應(yīng)用程序和一個(gè)資源服務(wù)器來(lái)實(shí)現(xiàn)單點(diǎn)登錄。我還將討論如何使用訪(fǎng)問(wèn)策略來(lái)強(qiáng)制執(zhí)行身份驗(yàn)證和授權(quán)策略,以及如何基于應(yīng)用程序范圍來(lái)限制對(duì)資源服務(wù)器的訪(fǎng)問(wèn)。

在進(jìn)入代碼之前,您需要適當(dāng)?shù)挠脩?hù)身份驗(yàn)證配置。今天,您將使用Okta作為OAuth 2.0和OpenID Connect(OIDC)提供程序。這將使您能夠管理用戶(hù)和組,并輕松啟用諸如社交和多因素日志身份驗(yàn)證之類(lèi)的選項(xiàng)。

首先,您需要先注冊(cè)并創(chuàng)建一個(gè)免費(fèi)的Okta開(kāi)發(fā)人員帳戶(hù)(如果尚未注冊(cè))。您會(huì)收到一封電子郵件,其中包含有關(guān)如何完成帳戶(hù)設(shè)置的說(shuō)明。完成此操作后,導(dǎo)航回到您的Okta帳戶(hù)以設(shè)置Web應(yīng)用程序,用戶(hù),資源服務(wù)器和授權(quán)服務(wù)器。首次登錄時(shí),可能需要單擊黃色的管理按鈕才能訪(fǎng)問(wèn)開(kāi)發(fā)人員的控制臺(tái)。

創(chuàng)建兩個(gè)OpenID Connect應(yīng)用程序

第一步是創(chuàng)建兩個(gè)OIDC應(yīng)用程序。OpenID Connect是建立在OAuth 2.0之上的身份驗(yàn)證協(xié)議,它是一種授權(quán)協(xié)議。每個(gè)OIDC應(yīng)用程序都為每個(gè)Web應(yīng)用程序?qū)嵗x一個(gè)身份驗(yàn)證提供程序終結(jié)點(diǎn)。

在Okta開(kāi)發(fā)人員控制臺(tái)中,導(dǎo)航到應(yīng)用程序,然后單擊添加應(yīng)用程序。選擇Web,然后單擊Next。使用以下值填充字段:

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

http:// localhost:8080 / login / oauth2 / code / okta

單擊完成。

向下滾動(dòng)并記下Client ID和Client Secret。您將很快使用這些值。

使用以下值對(duì)第二個(gè)應(yīng)用程序重復(fù)這些步驟:

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

http:// localhost:8081 / login / oauth2 / code / okta

單擊完成。

你還需要的Client ID,并Client Secret從該OIDC申請(qǐng)為好。

為您的Java應(yīng)用程序創(chuàng)建測(cè)試用戶(hù)

接下來(lái),您需要?jiǎng)?chuàng)建兩個(gè)用戶(hù)。第一個(gè)用戶(hù)只能登錄第一個(gè)應(yīng)用程序(OIDC App 1),第二個(gè)用戶(hù)可以登錄兩個(gè)應(yīng)用程序。

在開(kāi)發(fā)人員控制臺(tái)中,單擊“?用戶(hù)”?>“?人員”,然后單擊“?添加人員”。使用下表填寫(xiě)第一個(gè)用戶(hù)的信息表。也使用下表對(duì)第二個(gè)用戶(hù)重復(fù)此操作。

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

記下兩個(gè)用戶(hù)的用戶(hù)名密碼(稍后將與他們一起測(cè)試應(yīng)用程序)。

創(chuàng)建用戶(hù)后,您可以單擊用戶(hù)名,然后單擊配置文件,然后單擊“?編輯”。在此處,為以下字段的每個(gè)用戶(hù)添加一些信息:中間名和昵稱(chēng)。這將使您以后可以從應(yīng)用程序中查看此信息。

為您的資源服務(wù)器創(chuàng)建服務(wù)應(yīng)用程序

現(xiàn)在,您需要為資源服務(wù)器創(chuàng)建OIDC應(yīng)用程序。這將配置對(duì)REST API的訪(fǎng)問(wèn)。

在Okta開(kāi)發(fā)人員控制臺(tái)中,導(dǎo)航到應(yīng)用程序,然后單擊添加應(yīng)用程序。選擇服務(wù),然后單擊下一步。使用以下值填充字段:

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

單擊完成。

向下滾動(dòng)并復(fù)制Client ID和Client Secret。您將很快使用這些值。

創(chuàng)建授權(quán)服務(wù)器

Okta的最后一步是創(chuàng)建和配置授權(quán)服務(wù)器。這使您可以配置自定義聲明并設(shè)置自定義訪(fǎng)問(wèn)策略。這確定Okta是否在請(qǐng)求令牌時(shí)發(fā)出令牌,該令牌控制用戶(hù)訪(fǎng)問(wèn)客戶(hù)端應(yīng)用程序和資源服務(wù)器的能力。

導(dǎo)航對(duì)API?>?授權(quán)服務(wù)器。單擊添加授權(quán)服務(wù)器,然后按如下所示填寫(xiě)值:

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

api:// oidcauthserver

單擊“完成”,然后單擊“?聲明”選項(xiàng)卡。在“索賠”中,單擊“?添加索賠”,在下面的字段中填寫(xiě)“?索賠1”的值,然后單擊“?創(chuàng)建”。您可以將以下未提及的任何值保留為默認(rèn)值。完成后,重復(fù)并使用下面的Claim 2下的值創(chuàng)建第二個(gè)索賠。

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

接下來(lái),您將為第一個(gè)應(yīng)用程序添加訪(fǎng)問(wèn)策略。此應(yīng)用程序?qū)⒃试S兩個(gè)用戶(hù)訪(fǎng)問(wèn)它。單擊訪(fǎng)問(wèn)策略選項(xiàng)卡,添加新的訪(fǎng)問(wèn)策略,在這些字段中填寫(xiě)這些值,然后單擊創(chuàng)建策略

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

這會(huì)將策略綁定到您的OIDC應(yīng)用程序。

接下來(lái),點(diǎn)擊添加規(guī)則。設(shè)置OIDC App 1的規(guī)則名稱(chēng)字段。取消選擇除“?授權(quán)碼”之外的所有授權(quán)類(lèi)型,然后單擊“?創(chuàng)建規(guī)則”。

這樣可以確保請(qǐng)求必須使用授權(quán)代碼流才能使Okta創(chuàng)建令牌。這是所有可用OAuth流中最安全的流。它確保通過(guò)對(duì)POST請(qǐng)求的響應(yīng)來(lái)傳遞所有敏感信息(如令牌)。

接下來(lái),您將為第二個(gè)應(yīng)用程序添加訪(fǎng)問(wèn)策略。此應(yīng)用程序?qū)H允許第二個(gè)用戶(hù)Tanya Tester對(duì)其進(jìn)行訪(fǎng)問(wèn)。在訪(fǎng)問(wèn)策略標(biāo)簽中,添加策略,在這些字段中填寫(xiě)這些值,然后點(diǎn)擊創(chuàng)建策略

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

這會(huì)將策略綁定到您的OIDC應(yīng)用程序。

接下來(lái),點(diǎn)擊添加規(guī)則。設(shè)置OIDC App 2的規(guī)則名稱(chēng)字段。取消選擇除“?授權(quán)碼”之外的所有授權(quán)類(lèi)型。找到“?用戶(hù)”部分,然后選擇標(biāo)記為“已分配應(yīng)用程序和下列成員之一”的第二個(gè)單選按鈕:在出現(xiàn)的“?用戶(hù)”框中,開(kāi)始鍵入Tanya并Tanya Tester從列表中選擇。這表明只有該用戶(hù)可以登錄該OIDC App 2應(yīng)用程序。

點(diǎn)擊創(chuàng)建規(guī)則

單擊設(shè)置選項(xiàng)卡,然后復(fù)制頒發(fā)者URL。您將很快使用此值。

在Okta中完成所有配置工作。上代碼!

創(chuàng)建OAuth 2.0資源應(yīng)用

您將使用兩個(gè)不同的代碼庫(kù)。第一個(gè)是資源服務(wù)器的代碼庫(kù),如果客戶(hù)被授權(quán)獲取此類(lèi)信息,它將用于向客戶(hù)端應(yīng)用程序提供其他用戶(hù)信息。

首先下載GitHub存儲(chǔ)庫(kù)中可用的資源服務(wù)器的代碼。

Java

git clone https://github.com/oktadeveloper/okta-java-spring-sso-example.git
cd okta-java-spring-sso-example/oauth2-resource-server

您將需要使用在Okta中創(chuàng)建的“ OIDC資源服務(wù)器”應(yīng)用程序中的值來(lái)配置資源應(yīng)用程序。打開(kāi)
src/main/resources/application.properties文件。

Java

okta.oauth2.issuer={issuerUri}
okta.oauth2.clientId={clientId}
okta.oauth2.clientSecret={clientSecret}
okta.oauth2.audience=api://oidcauthserver
server.port=8082

將{clientId}和替換為{clientSecret}您為上面的資源服務(wù)器寫(xiě)下的那些。這{issuerUri}是您在上面創(chuàng)建的授權(quán)服務(wù)器的頒發(fā)者URI。轉(zhuǎn)到API授權(quán)服務(wù)器,然后查看OIDC身份驗(yàn)證服務(wù)器旁邊的表。

要查看資源服務(wù)器的功能,請(qǐng)查看DemoResourceServer該類(lèi)中的代碼。

src/main/java/com/okta/examples/sso/DemoResourceServer.java

Java

package com.okta.examples.sso;
import java.security.Principal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class DemoResourceServer  {
    public static void main(String[] args) {
        SpringApplication.run(DemoResourceServer.class, args);
    }
    @GetMapping("/welecomeMessage")
    @PreAuthorize("hasAuthority('SCOPE_profile')")
    public String getWelcomeMessage(Principal principal) {
        JwtAuthenticationToken jwtAuth = (JwtAuthenticationToken) principal;
        String fullName = jwtAuth.getToken().getClaimAsString("fullName");
        return "Welcome " + fullName + "!";
    }
    @GetMapping("/userEmail")
    @PreAuthorize("hasAuthority('SCOPE_email')")
    public String getUserEmail(Principal principal) {
        JwtAuthenticationToken jwtAuth = (JwtAuthenticationToken) principal;
        String email = jwtAuth.getToken().getClaimAsString("userEmail");
        return email;
    }
}

此代碼同時(shí)設(shè)置了Spring Boot應(yīng)用程序和控制器。該@SpringBootApplication注解告訴它應(yīng)支持自動(dòng)配置,組件掃描,和豆注冊(cè)該應(yīng)用程序。

該@RestController注解告訴系統(tǒng)這個(gè)文件是一個(gè)REST API控制器,它只是意味著它包含API端點(diǎn)的集合。該@
EnableGlobalMethodSecurity注解告訴系統(tǒng)端點(diǎn)可能對(duì)方法的水平,這兩種方法做安全放。每個(gè)get端點(diǎn)都使用@PreAuthorize注釋來(lái)告訴系統(tǒng)調(diào)用應(yīng)用程序必須具有指定的特定范圍才能被授權(quán)。例如,如果/userEmail端點(diǎn)在沒(méi)有email作用域的情況下被調(diào)用,它將拋出錯(cuò)誤。

該getWelcomeMessage方法返回一條歡迎消息,其中包含用戶(hù)的全名。該getUserEmail方法將返回用戶(hù)的電子郵件。這兩個(gè)數(shù)據(jù)都是從您之前在Okta控制臺(tái)中設(shè)置的令牌聲明中提取的。

打開(kāi)一個(gè)Shell并使用Maven啟動(dòng)資源服務(wù)器的實(shí)例。

Shell

./mvnw spring-boot:run

現(xiàn)在它將在port上監(jiān)聽(tīng)8082。

創(chuàng)建OAuth 2.0客戶(hù)端應(yīng)用

您將使用的第二個(gè)代碼庫(kù)是兩個(gè)不同客戶(hù)端應(yīng)用程序的代碼庫(kù)。兩個(gè)客戶(hù)端應(yīng)用程序?qū)⑹褂孟嗤拇a,但是將以不同的配置啟動(dòng)。

運(yùn)行客戶(hù)端應(yīng)用程序時(shí),將首先為OIDC App 1(已配置概要文件范圍)運(yùn)行它。

您還將為OIDC App 2運(yùn)行它,但是對(duì)于此應(yīng)用程序,將在配置文件和電子郵件范圍都已設(shè)置的情況下運(yùn)行它。

這是這兩個(gè)應(yīng)用程序之間的主要配置差異之一。

對(duì)于兩個(gè)客戶(hù)端應(yīng)用程序?qū)嵗?,?qǐng)從oauth2-client示例項(xiàng)目目錄中的代碼開(kāi)始。

此Web應(yīng)用程序非常簡(jiǎn)單。它導(dǎo)入所需的Okta和Spring依賴(lài)項(xiàng),然后僅定義可以在給定某些參數(shù)的情況下啟動(dòng)的客戶(hù)端應(yīng)用程序。該應(yīng)用程序的完整代碼在SingleSignOnApplication類(lèi)中。

src/main/java/com/okta/examples/sso/SingleSignOnApplication.java

Java

package com.okta.examples.sso;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository;
import org.springframework.security.oauth2.client.web.reactive.function.client.ServletOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.servlet.ModelAndView;
@Controller
@SpringBootApplication
public class SingleSignOnApplication {
    private WebClient webClient;
    @Value("#{ @environment['resourceServer.url'] }"
    private String resourceServerUrl;
    public static void main(String[] args) {
        SpringApplication.run(SingleSignOnApplication.class, args);
    }
    public SingleSignOnApplication(WebClient webClient) {
        this.webClient = webClient;
    }
    @GetMapping("/")
    public ModelAndView home(@AuthenticationPrincipal OidcUser user) {
        ModelAndView mav = new ModelAndView();
        mav.addObject("user", user.getUserInfo());
        Map<String,String> userBasicProfile = new HashMap<String,String>();
        userBasicProfile.put("First Name",user.getGivenName());
        userBasicProfile.put("Middle Initial",user.getMiddleName());
        userBasicProfile.put("Last Name",user.getFamilyName());
        userBasicProfile.put("Nick Name",user.getNickName());
        String welcomeMessage = this.webClient.get()
                .uri(this.resourceServerUrl + "/welecomeMessage").retrieve()
                .bodyToMono(String.class).block();
        mav.addObject("welcomeMessage",welcomeMessage);
        try {
            String email = this.webClient.get()
                    .uri(this.resourceServerUrl + "/userEmail").retrieve()
                    .bodyToMono(String.class).block();
            if (email != null) {
                userBasicProfile.put("Email", email);
            }
        } catch (Exception e) {
            mav.addObject("emailError", true);
        }
        mav.addObject("profile", userBasicProfile);
        mav.setViewName("home");
        return mav;
    }
    @Configuration
    public static class OktaWebClientConfig {
        @Bean
        WebClient webClient(ClientRegistrationRepository clientRegistrations,
                            OAuth2AuthorizedClientRepository authorizedClients) {
            ServletOAuth2AuthorizedClientExchangeFilterFunction oauth2 = new ServletOAuth2AuthorizedClientExchangeFilterFunction(
                    clientRegistrations, authorizedClients);
            oauth2.setDefaultOAuth2AuthorizedClient(true);
            oauth2.setDefaultClientRegistrationId("okta");
            return WebClient.builder().apply(oauth2.oauth2Configuration()).build();
        }
    }
}

該文件同時(shí)帶有@Controller和@SpringBootApplication注釋。該@SpringBootApplication注解告訴它應(yīng)支持自動(dòng)配置,組件掃描,和豆注冊(cè)該應(yīng)用程序。

該@Controller注解告訴系統(tǒng)這個(gè)文件是一個(gè)REST API控制器。在這種情況下,只有一個(gè)端點(diǎn)處理GET對(duì)基本/URL的請(qǐng)求。

該端點(diǎn)調(diào)用home方法中的代碼,用最簡(jiǎn)單的術(shù)語(yǔ)來(lái)說(shuō),該方法將建立一堆要顯示在頁(yè)面上的數(shù)據(jù),并告訴頁(yè)面使用哪個(gè)模板來(lái)顯示此數(shù)據(jù)。

在該home方法內(nèi),有兩個(gè)對(duì)資源服務(wù)器的調(diào)用。首先,它調(diào)用資源服務(wù)器以獲取歡迎消息以顯示在頁(yè)面上。只要應(yīng)用程序配置了概要文件作用域集(如我之前提到的那樣),該消息就會(huì)成功返回,它將為客戶(hù)端應(yīng)用程序的兩個(gè)實(shí)例都設(shè)置。下一個(gè)呼叫將獲取用戶(hù)的電子郵件。僅在為應(yīng)用程序設(shè)置了電子郵件范圍的情況下,才成功返回電子郵件。

請(qǐng)記住,只有客戶(hù)端應(yīng)用程序的第二個(gè)實(shí)例將設(shè)置電子郵件范圍,因此對(duì)于第一個(gè)實(shí)例,它將引發(fā)錯(cuò)誤。這是使用范圍確定授權(quán)的授權(quán)失敗示例。

如果無(wú)法檢索到電子郵件,則設(shè)置一個(gè)標(biāo)志,告訴模板(在home.html文件中配置)顯示一條消息,指出該應(yīng)用程序無(wú)權(quán)獲取用戶(hù)的電子郵件。

使用Spring Run Profiles配置客戶(hù)端應(yīng)用程序

現(xiàn)在,您需要在oauth2-client項(xiàng)目文件夾中配置客戶(hù)端應(yīng)用程序的兩個(gè)不同實(shí)例。您需要能夠使用兩個(gè)不同的配置值來(lái)運(yùn)行客戶(hù)端應(yīng)用程序的兩個(gè)不同的實(shí)例。為此,您將利用Spring Boot的運(yùn)行配置文件。這通常用于分隔諸如testand dev和production,但是沒(méi)有理由我們不能在這里使用它。

如果查看
oauth2-client/src/main/resources,您將看到三個(gè).properties文件。

application.properties對(duì)所有三個(gè)配置文件都是通用的
application-client1.properties具有客戶(hù)端1?
application-client2.properties的配置值具有客戶(hù)端2的配置值

打開(kāi)
oauth2-client/src/main/resources/application.properties并填寫(xiě)您在上面創(chuàng)建的資源服務(wù)器的頒發(fā)者URI。

要查找頒發(fā)者URI(如果您沒(méi)有記下來(lái)的話(huà)),請(qǐng)轉(zhuǎn)到API授權(quán)服務(wù)器。在頒發(fā)者URI下的OIDC身份驗(yàn)證服務(wù)器旁邊的表中查找。

Java

okta.oauth2.issuer={yourIssuerUri}
resourceServer.url=http://localhost:8082

打開(kāi)
oauth2-client/src/main/resources/application-client1.properties并填寫(xiě)第一個(gè)OIDC客戶(hù)端應(yīng)用程序的客戶(hù)端ID和客戶(hù)端密鑰。

如果您需要再次找到這些值,請(qǐng)從Okta Developer的控制臺(tái)中,轉(zhuǎn)到Applications,單擊表中的OIDC應(yīng)用程序名稱(chēng)(OIDC App 1),然后單擊General選項(xiàng)卡??蛻?hù)端ID和客戶(hù)端密鑰在底部。

Java

okta.oauth2.clientId={yourClient1Id}
okta.oauth2.clientSecret={yourClient1Secret}
okta.oauth2.scopes=openid,profile
server.port=8080

打開(kāi)
oauth2-client/src/main/resources/application-client2.properties并填寫(xiě)第二個(gè)OIDC客戶(hù)端應(yīng)用程序的客戶(hù)端ID和客戶(hù)端密鑰。

Java

okta.oauth2.clientId={yourClient2Id}
okta.oauth2.clientSecret={yourClient2Secret}
okta.oauth2.scopes=openid,profile,email
server.port=8081

最后一步是運(yùn)行此客戶(hù)端應(yīng)用程序的兩個(gè)實(shí)例。在兩個(gè)單獨(dú)的Shell窗口中運(yùn)行以下命令。這會(huì)為客戶(hù)端加載每個(gè)運(yùn)行配置文件。

在http:// localhost:8080上運(yùn)行客戶(hù)端應(yīng)用程序1:

Shell

./mvnw spring-boot:run -Dspring-boot.run.profiles=client1

在http:// localhost:8081上運(yùn)行客戶(hù)端應(yīng)用2:

Shell

./mvnw spring-boot:run -Dspring-boot.run.profiles=client2

那是很多事情的配置,所以讓我們快速回顧一下剛剛設(shè)置并運(yùn)行的內(nèi)容。

  • http:// localhost:8082是您的本地資源服務(wù)器
  • http:// localhost:8080是客戶(hù)端應(yīng)用程序1(任何經(jīng)過(guò)身份驗(yàn)證的用戶(hù)都可以訪(fǎng)問(wèn))
  • http:// localhost:8081是客戶(hù)端應(yīng)用程序2(訪(fǎng)問(wèn)策略設(shè)置為僅允許Tany Tester訪(fǎng)問(wèn))

在Okta方面:

  • 您為服務(wù)器和兩個(gè)客戶(hù)端應(yīng)用程序創(chuàng)建了匹配的OIDC應(yīng)用程序。這將為每個(gè)應(yīng)用程序生成唯一的客戶(hù)端ID和客戶(hù)端密鑰,這使Okta可以對(duì)應(yīng)用程序進(jìn)行身份驗(yàn)證,并允許您使用Okta對(duì)其進(jìn)行配置。
  • 您還創(chuàng)建了一個(gè)自定義授權(quán)服務(wù)器。這將管理來(lái)自應(yīng)用程序的所有身份驗(yàn)證和授權(quán)請(qǐng)求。
  • 在授權(quán)服務(wù)器中,您創(chuàng)建了兩個(gè)訪(fǎng)問(wèn)策略,每個(gè)客戶(hù)端應(yīng)用程序一個(gè)。兩種訪(fǎng)問(wèn)策略均限制對(duì)授權(quán)碼流的訪(fǎng)問(wèn)。第一個(gè)客戶(hù)端應(yīng)用程序?qū)θ魏谓?jīng)過(guò)身份驗(yàn)證的用戶(hù)(通過(guò)Okta的單點(diǎn)登錄進(jìn)行身份驗(yàn)證的任何用戶(hù))開(kāi)放。第二個(gè)應(yīng)用程序僅限于用戶(hù)Tanya Tester。

因此,您創(chuàng)建了一個(gè)非常典型的生產(chǎn)場(chǎng)景,其中有一個(gè)資源服務(wù)器為多個(gè)客戶(hù)端應(yīng)用程序提供數(shù)據(jù),并且您使用Okta的儀表板提供單點(diǎn)登錄,管理用戶(hù)以及設(shè)置對(duì)客戶(hù)端應(yīng)用程序和資源服務(wù)器的訪(fǎng)問(wèn)策略。

得到它了?是時(shí)候嘗試一下了。

測(cè)試您的Java單一登錄

在接下來(lái)的幾個(gè)步驟中,您將在兩個(gè)不同的應(yīng)用程序上登錄和注銷(xiāo)不同的Okta帳戶(hù)。使用隱身窗口將避免注銷(xiāo)Okta開(kāi)發(fā)人員控制臺(tái)或單一登錄帳戶(hù)。

打開(kāi)一個(gè)新的隱身瀏覽器窗口,然后輸入U(xiǎn)RL http://localhost:8080。這是第一個(gè)應(yīng)用程序的URL OIDC App 1。

用tanyaTester@mail.com用戶(hù)登錄。您應(yīng)該能夠成功登錄!

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

接下來(lái),您可以將URL更改為http://localhost:8081。這是第二個(gè)應(yīng)用程序的URL OIDC App 2。您會(huì)發(fā)現(xiàn)您不必再次登錄。這是因?yàn)槟呀?jīng)登錄,OIDC App 1并且是單點(diǎn)登錄!

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

如果要關(guān)閉瀏覽器窗口,打開(kāi)一個(gè)新的隱身瀏覽器,然后OIDC App 2再次登錄,系統(tǒng)將提示您重新登錄,因?yàn)樗鼘⒉辉倬哂心臅?huì)話(huà)。

測(cè)試您的訪(fǎng)問(wèn)策略

您已經(jīng)看到Tanya Tester可以登錄到兩個(gè)應(yīng)用程序。接下來(lái),您將看到與amandaTester@mail.com用戶(hù)一起登錄每個(gè)應(yīng)用程序時(shí)會(huì)發(fā)生什么。如果尚未關(guān)閉,請(qǐng)關(guān)閉用于測(cè)試的任何隱身瀏覽器窗口。

打開(kāi)一個(gè)新的隱身瀏覽器窗口,然后輸入U(xiǎn)RL http://localhost:8080。用amandaTester@mail.com用戶(hù)登錄。您應(yīng)該能夠成功登錄!

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

關(guān)閉該瀏覽器窗口,然后打開(kāi)一個(gè)新的隱身瀏覽器窗口,然后輸入U(xiǎn)RL http://localhost:8081。

用amandaTester@mail.com用戶(hù)登錄。您將收到“訪(fǎng)問(wèn)被拒絕”錯(cuò)誤。

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

出現(xiàn)此錯(cuò)誤的原因是,您設(shè)置了訪(fǎng)問(wèn)策略,因此只能Tanya Tester登錄OIDC App 2。

測(cè)試范圍授權(quán)

最后,您將測(cè)試資源服務(wù)器如何處理每個(gè)應(yīng)用程序的授權(quán)。

打開(kāi)一個(gè)新的隱身瀏覽器窗口,然后輸入U(xiǎn)RL http://localhost:8080。用tanyaTester@mail.com用戶(hù)登錄。您應(yīng)該能夠成功登錄。

請(qǐng)注意,您將在頂部看到一條消息,其中包含特定于用戶(hù)的歡迎消息。這是因?yàn)閼?yīng)用程序正在使用配置文件作用域,因此被允許訪(fǎng)問(wèn)歡迎消息端點(diǎn)。在其下,您將看到一條消息,指出該應(yīng)用程序無(wú)權(quán)訪(fǎng)問(wèn)電子郵件信息。這是因?yàn)樵搼?yīng)用程序?qū)嵗磁c電子郵件范圍一起運(yùn)行。

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

接下來(lái),您可以將URL更改為http://localhost:8081。請(qǐng)記住,這是第二個(gè)應(yīng)用程序的URL OIDC App 2。當(dāng)您轉(zhuǎn)到此頁(yè)面時(shí),您會(huì)注意到您沒(méi)有看到有關(guān)無(wú)法訪(fǎng)問(wèn)該電子郵件的消息。相反,您會(huì)在配置文件信息中看到該電子郵件。

超詳細(xì)!一步一步教會(huì)你如何使用Java構(gòu)建單點(diǎn)登錄

好啦!今天的分享到這里就結(jié)束了,希望大家持續(xù)關(guān)注馬哥教育官網(wǎng),每天都會(huì)有大量?jī)?yōu)質(zhì)內(nèi)容與大家分享!

文章來(lái)源于網(wǎng)絡(luò),侵刪!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專(zhuān)業(yè)人才培訓(xùn)機(jī)構(gòu)!