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