如 适用于 Java 的 MSAL 使用方案 中所述,有多种方式可以获取令牌。 有些要求通过 Web 浏览器进行用户交互。 有些不需要任何用户交互。
通常,获取令牌的方式因应用程序类型(公共客户端应用程序(桌面/移动)或机密客户端应用程序(Web 应用、Web API、守护程序应用程序(如Windows服务)而异。
先决条件
在通过 MSAL4J 获取令牌之前,请确保实例化 客户端应用程序
令牌获取方法
请参阅以下主题,了解每种令牌获取方法的详细说明及其 MSAL4J 代码用法。
公共客户端应用程序
- 使用系统浏览器以交互方式获取令牌
- 让用户通过授权请求 URL 登录后,通过 授权代码 获取令牌。
- 还可以使用 用户名和密码获取令牌。(此流已弃用)
- 对于在 Windows 计算机上运行且已加入域或 Microsoft Entra ID 的应用程序,可以借助 集成式 Windows 身份验证 (IWA) 以静默方式获取令牌。
- 最后,对于在没有 Web 浏览器的设备上运行的应用程序,可以通过 设备代码流获取令牌,该流为用户提供 URL 和代码。 用户转到另一台设备上的 Web 浏览器,输入代码并登录,然后Microsoft Entra ID将令牌返回给无浏览器设备。
机密客户端应用程序
- 使用客户端凭据以应用程序自身身份获取令牌,而不是代表用户。 例如,在批量处理用户而不是特定用户(例如同步工具)的应用中。
- 对于以用户身份调用另一个下游 Web API的 Web 应用或 Web API,请使用On-Behalf-Of 流基于某种用户断言(例如 SAML 或 JWT 令牌)获取令牌。
- 对于用户名中的 Web 应用,在允许用户通过授权请求 URL 登录后,通过 授权代码 获取令牌。 这通常是应用程序使用的机制,它允许用户使用 OpenID Connect 登录,但随后想要访问此特定用户的 Web API。
MSAL4J 缓存令牌
对于公共客户端和机密客户端应用程序,MSAL 会维护令牌缓存,应用程序应首先尝试从缓存中获取令牌,然后再考虑通过其他方式获取(客户端凭据这种情况除外,因为它会自行检查缓存)。 查看有关令牌获取的推荐模式。
为了能够利用缓存,应用程序需要自定义 令牌缓存序列化。