API通常需要識(shí)別其調(diào)用方。它可以是調(diào)用API的Web應(yīng)用程序,也可以是調(diào)用API的另一個(gè)API。識(shí)別API的調(diào)用者也稱為身份驗(yàn)證。建立自己的身份驗(yàn)證框架可能很棘手。值得慶幸的是,不必建立自己的身份驗(yàn)證框架。已經(jīng)有可用的解決方案。AzureActiveDirectory(AzureAD),Microsoft身份驗(yàn)證庫(kù)(MSAL),可在各種平臺(tái)上工作以處理令牌和身份驗(yàn)證。 AzureAD為用戶提供了一種使用組織提供的預(yù)先存在的憑據(jù)登錄應(yīng)用程序的方法,而不是為每個(gè)應(yīng)用程序進(jìn)行新的登錄。使用AzureAD使您的應(yīng)用程序擺脫了與用戶維護(hù)相關(guān)的許多任務(wù),例如登錄和密碼重置。OAuth流對(duì)用戶進(jìn)行身份驗(yàn)證,然后將用戶暫時(shí)轉(zhuǎn)到另一個(gè)頁(yè)面進(jìn)行登錄。登錄后,該頁(yè)面將訪問(wèn)令牌回傳給應(yīng)用程序。應(yīng)用程序可以使用訪問(wèn)令牌來(lái)檢索有關(guān)當(dāng)前用戶的更多信息。 創(chuàng)建一個(gè)租戶若要開(kāi)始使用AzureAD,您需要有權(quán)訪問(wèn)AzureAD租戶。租戶代表一個(gè)組織。您可能已經(jīng)為您的帳戶設(shè)置了一個(gè)租戶。要進(jìn)行檢查,請(qǐng)登錄到Azure門(mén)戶并在右上角查找。如果您的帳戶是為租戶設(shè)置的,它將顯示在您的用戶名下方。 如果您還沒(méi)有AzureAD租戶,則可以創(chuàng)建一個(gè)。在Azure門(mén)戶中,選擇“AzureActiveDirectory”。從頂部的菜單中,選擇“創(chuàng)建租戶”。 選擇“AzureActiveDirectory”作為租戶類型,然后單擊“下一步”。填寫(xiě)貴組織的信息,然后繼續(xù)創(chuàng)建承租人。 一旦有了租戶,就必須將應(yīng)用程序注冊(cè)為AzureAD的客戶端。在門(mén)戶中,選擇“AzureActiveDirectory”。在“管理”菜單下,選擇“應(yīng)用程序注冊(cè)”,然后單擊+新注冊(cè)。 為用戶可以識(shí)別的應(yīng)用程序提供一個(gè)名稱,并確保您已從“支持的帳戶類型”選項(xiàng)中選擇了租戶。單擊注冊(cè)以創(chuàng)建您的租戶。 將其添加到應(yīng)用程序現(xiàn)在,您已經(jīng)設(shè)置了一個(gè)租戶,MicrosoftJava身份驗(yàn)證庫(kù)(MSAL4J)將管理身份驗(yàn)證。通過(guò)將依賴項(xiàng)聲明添加到項(xiàng)目的Maven存儲(chǔ)庫(kù)中,可以將MSAL4J添加到項(xiàng)目中。添加后,可通過(guò)com.microsoft.azure.msal4j名稱空間使用庫(kù)的類。 <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>msal4j</artifactId> <version>1.9.1</version> </dependency>12345復(fù)制代碼類型:[java] MSAL4J支持不同的身份驗(yàn)證方案。兩種常見(jiàn)方案是: 用戶必須通過(guò)應(yīng)用程序進(jìn)行身份驗(yàn)證。 服務(wù)必須通過(guò)應(yīng)用程序進(jìn)行身份驗(yàn)證。 當(dāng)用戶必須進(jìn)行身份驗(yàn)證時(shí),可以將OAuth用于方案。OAuth是一種開(kāi)放標(biāo)準(zhǔn),使一個(gè)網(wǎng)站或服務(wù)可以在不共享用戶憑據(jù)的情況下對(duì)另一個(gè)網(wǎng)站或服務(wù)執(zhí)行身份驗(yàn)證。該應(yīng)用程序?qū)⒂脩艮D(zhuǎn)發(fā)到登錄頁(yè)面,然后用戶使用其帳戶憑據(jù)登錄。身份驗(yàn)證完成后,頁(yè)面會(huì)將用戶發(fā)送回應(yīng)用程序,并為應(yīng)用程序提供用戶的身份驗(yàn)證令牌。該應(yīng)用程序使用身份驗(yàn)證令牌來(lái)檢索訪問(wèn)令牌。MSAL4J簡(jiǎn)化了令牌的檢索。在我們的應(yīng)用程序中,添加以下代碼以檢索訪問(wèn)令牌。 //ConfidentialClientApplication app;String authCode = authorizationCode.getValue(); AuthorizationCodeParameters parameters = AuthorizationCodeParameters.builder( authCode, new URI(currentUri)). build(); IAuthenticationResult result = app.acquireToken(parameters).get(); SessionManagementHelper.storeTokenCacheInSession(httpServletRequest, app.tokenCache().serialize());123456789復(fù)制代碼類型:[java] 對(duì)于需要身份驗(yàn)證的Web呼叫,將訪問(wèn)令牌添加到該呼叫的標(biāo)題中。AzureAD還提供了一個(gè)終結(jié)點(diǎn),當(dāng)使用訪問(wèn)令牌調(diào)用該終結(jié)點(diǎn)時(shí),該終結(jié)點(diǎn)可在JSON對(duì)象中提供有關(guān)用戶的信息。 HttpURLConnection connection = (HttpURLConnection) MSGraphEndpoint; connection.setRequestProperty("Authorization", "Bearer " + accessToken); connection.setRequestProperty("Accept", "application/json"); String response = HttpClientHelper.getResponseStringFromConn(connection); int responseCode = conn.getResponseCode(); if(responseCode != HttpURLConnection.HTTP_OK) { throw new IOException(response); } JSONObject userInformation = HttpClientHelper.processResponse(responseCode, response);1234567891011復(fù)制代碼類型:[java] 嘗試自己運(yùn)行該應(yīng)用程序。現(xiàn)在,當(dāng)您運(yùn)行該應(yīng)用程序時(shí),它將檢查用戶是否登錄。如果用戶未登錄,則用戶會(huì)看到指向登錄頁(yè)面的鏈接。用戶登錄后,頁(yè)面將顯示一條消息,表明用戶已成功登錄并顯示基本信息。 結(jié)論Azure提供了其他功能,可用于豐富應(yīng)用程序的功能。在本系列的下一部分中,我們將介紹Azure認(rèn)知服務(wù)以及如何使用現(xiàn)有的云原生服務(wù) |
|
來(lái)自: 碼農(nóng)9527 > 《Java》