首頁>技術>

API通常需要識別其呼叫方。它可以是呼叫API的Web應用程式,也可以是呼叫API的另一個API。識別API的呼叫者也稱為身份驗證。建立自己的身份驗證框架可能很棘手。值得慶幸的是,不必建立自己的身份驗證框架。已經有可用的解決方案。AzureActiveDirectory(AzureAD),Microsoft身份驗證庫(MSAL),可在各種平臺上工作以處理令牌和身份驗證。

AzureAD為使用者提供了一種使用組織提供的預先存在的憑據登入應用程式的方法,而不是為每個應用程式進行新的登入。使用AzureAD使您的應用程式擺脫了與使用者維護相關的許多工,例如登入和密碼重置。OAuth流對使用者進行身份驗證,然後將使用者暫時轉到另一個頁面進行登入。登入後,該頁面將訪問令牌回傳給應用程式。應用程式可以使用訪問令牌來檢索有關當前使用者的更多資訊。

建立一個租戶

若要開始使用AzureAD,您需要有權訪問AzureAD租戶。租戶代表一個組織。您可能已經為您的帳戶設定了一個租戶。要進行檢查,請登入到Azure門戶並在右上角查詢。如果您的帳戶是為租戶設定的,它將顯示在您的使用者名稱下方。

如果您還沒有AzureAD租戶,則可以建立一個。在Azure門戶中,選擇“AzureActiveDirectory”。從頂部的選單中,選擇“建立租戶”。

選擇“AzureActiveDirectory”作為租戶型別,然後單擊“下一步”。填寫貴組織的資訊,然後繼續建立承租人。

一旦有了租戶,就必須將應用程式註冊為AzureAD的客戶端。在門戶中,選擇“AzureActiveDirectory”。在“管理”選單下,選擇“應用程式註冊”,然後單擊+新註冊。

為使用者可以識別的應用程式提供一個名稱,並確保您已從“支援的帳戶型別”選項中選擇了租戶。單擊註冊以建立您的租戶。

將其新增到應用程式

現在,您已經設定了一個租戶,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支援不同的身份驗證方案。兩種常見方案是:

使用者必須透過應用程式進行身份驗證。

服務必須透過應用程式進行身份驗證。

當用戶必須進行身份驗證時,可以將OAuth用於方案。OAuth是一種開放標準,使一個網站或服務可以在不共享使用者憑據的情況下對另一個網站或服務執行身份驗證。該應用程式將使用者轉發到登入頁面,然後使用者使用其帳戶憑據登入。身份驗證完成後,頁面會將使用者傳送迴應用程式,併為應用程式提供使用者的身份驗證令牌。該應用程式使用身份驗證令牌來檢索訪問令牌。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還提供了一個終結點,當使用訪問令牌呼叫該終結點時,該終結點可在JSON物件中提供有關使用者的資訊。

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]

嘗試自己執行該應用程式。現在,當您執行該應用程式時,它將檢查使用者是否登入。如果使用者未登入,則使用者會看到指向登入頁面的連結。使用者登入後,頁面將顯示一條訊息,表明使用者已成功登入並顯示基本資訊。

結論

Azure提供了其他功能,可用於豐富應用程式的功能。在本系列的下一部分中,我們將介紹Azure認知服務以及如何使用現有的雲原生服務

7
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • OpenWrt路由器打造小型NAS服務(二):把家庭網路搬上雲端(下)