系统浏览器
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();