互動式取得代幣

系統瀏覽器

MSAL 支援透過系統瀏覽器在公共用戶端互動式取得令牌。 預設情況下,MSAL 會以獨立程序啟動系統瀏覽器,導引使用者至授權網址,並攔截授權回應。 你可以 自訂這種行為,例如瀏覽器視窗的開啟方式以及授權後使用者所看到的內容,透過設定 SystemBrowserOptions 互動式請求的參數來實現。

MSAL 會監聽 http://localhost:port 並攔截該權威發送的程式碼,當使用者完成驗證後。 MSAL 無法偵測使用者是直接離開還是直接關閉瀏覽器。 採用此技術的應用程式被鼓勵定義一個逾時時間。 我們建議至少暫停幾分鐘,以考慮使用者被要求更改密碼或執行雙重驗證的情況。

如何使用預設作業系統瀏覽器

在應用程式註冊期間,將 http://localhost 設定為重新導向 URI。 以 B2C 為例,你需要註冊特定的埠 http://locahost:port口。

PublicClientApplication publicClientApplication =
        PublicClientApplication
                .builder(CLIENT_ID)
                .authority(AUTHORITY)
                .build();

InteractiveRequestParameters parameters = InteractiveRequestParameters
        .builder(new URI("http://localhost"))
        .scopes(scope)
        .build();

IAuthenticationResult result = publicClientApplication.acquireToken(parameters).join();

客製化體驗

MSAL 嘗試在使用者的電腦上開啟預設的系統瀏覽器(若有的話)。 你可以透過提供你自己的 OpenBrowserAction 實作來自訂這個邏輯。

  • 實作 OpenBrowserAction
  • 將自訂動作傳遞給 SystemBrowserOptions
class CustomOpenBrowserAction implements OpenBrowserAction {
    @Override
    public void openBrowser(URL url){
            //Custom logic to open URL 
    }
}

SystemBrowserOptions options =  
        SystemBrowserOptions
                .builder()
                .openBrowserAction(new CustomOpenBrowserAction())
                .build();

你也可以自訂使用者驗證後看到的 HTML 訊息,甚至提供你希望使用者在驗證後被導向的網址。

SystemBrowserOptions options =  
        SystemBrowserOptions
                .builder()
                .htmlMessageSuccess("CUSTOM_HTML_HERE")
                .htmlMessageError("CUSTOM_HTML_HERE")
                .build();
// OR

SystemBrowserOptions options =
        SystemBrowserOptions
                .builder()
                .browserRedirectSuccess(new URI("http://localhost:port"))
                .browserRedirectError(new URI ("http://localhost:port"))
                .build();