以交互方式获取令牌

系统浏览器

MSAL 支持使用系统浏览器以交互方式在公共客户端上获取令牌。 默认情况下,MSAL 将启动系统浏览器作为单独的进程,将用户定向到授权 URL,并截获授权响应。 可以通过配置交互式请求的参数来SystemBrowserOptions,例如浏览器窗口的打开方式以及用户在授权后看到的内容。

MSAL 将侦听 http://localhost:port,并在用户完成身份验证后拦截授权服务器发送的授权代码。 MSAL 无法检测用户是离开当前页面,还是只是关闭了浏览器。 建议使用此技术的应用设置超时时间。 建议至少几分钟超时,以考虑提示用户更改密码或执行 2FA 的情况。

如何使用默认 OS 浏览器

在注册应用时,将 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 消息,甚至提供一个 URL,你希望用户在进行身份验证后重定向到该 URL。

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();