培训
认证
Microsoft Certified: Identity and Access Administrator Associate - Certifications
演示 Microsoft Entra ID 的功能,以将标识解决方案现代化、实现混合解决方案和实现标识治理。
客户端可以使用访问令牌安全调用受 Azure 保护的 Web API。 可以使用 Microsoft 身份验证库 (MSAL) 通过多种方式获取令牌。 某些方式需要用户通过 Web 浏览器进行交互,而另一些方式则不需要用户交互。 通常,用于获取令牌的方法取决于应用程序是公共客户端应用程序(桌面版或移动版),还是机密客户端应用程序(Web 应用、Web API 或守护程序应用)。
MSAL 在获取令牌后会缓存令牌。 在尝试通过其他方式获取令牌之前,应用程序代码应该先尝试以无提示方式从缓存中获取令牌。
你还可以通过从缓存中移除帐户来清除令牌缓存。 不过,这不会删除浏览器中的会话 Cookie。
范围是客户端应用程序可以请求访问的 Web API 公开的权限。 在发出身份验证请求以获取用于访问 Web API 的令牌时,客户端应用程序将请求用户许可这些范围。 MSAL 允许获取令牌以访问 Microsoft 标识平台 API。 v2.0 协议在请求中使用范围而不是资源。 根据 v2.0 终结点接受的令牌版本的 Web API 配置,该终结点会将访问令牌返回到 MSAL。
MSAL 的一些令牌获取方法需要使用 scopes
参数。 scopes
参数是一个字符串列表,这些字符串声明了所需的权限和所请求的资源。 广为人知的范围是 Microsoft Graph 权限。
当应用程序需要请求对资源 API 具有特定权限的访问令牌时,请按 <app ID URI>/<scope>
格式传递包含 API 的应用 ID URI 的范围。
适用于不同资源的一些示例范围值:
https://graph.microsoft.com/User.Read
api://00001111-aaaa-2222-bbbb-3333cccc4444/api.read
范围值的格式因接收访问令牌的资源 (API) 和其接受的 aud
声明值而异。
单纯对于 Microsoft Graph 而言,user.read
范围映射到 https://graph.microsoft.com/User.Read
,这两种范围格式可以互换使用。
某些 Web API(例如 Azure 资源管理器 API (https://management.core.windows.net/
))要求在访问令牌的受众声明 (/
) 中使用尾随正斜杠 (aud
)。 在这种情况下,请将范围作为 https://management.core.windows.net//user_impersonation
传递,其中包括双正斜杠 (//
)。
其他 API 可能要求不在范围值中包括方案或主机,并且仅需要应用 ID (GUID) 和范围名称,例如:
00001111-aaaa-2222-bbbb-3333cccc4444/api.read
提示
如果下游资源不受你的控制,而你在将访问令牌传递给资源时收到 401
或其他错误,你可能需要尝试不同的范围值格式(例如,包含/不包含方案和主机)。
当应用程序提供的功能或其要求发生变化时,你可以根据需要使用范围参数请求其他权限。 这样的动态范围允许用户针对范围提供增量许可。
例如,你可以让用户登录,但最初拒绝他们访问任何资源。 然后,你可以在令牌获取方法中请求日历范围并获得用户的同意,从而让用户能够查看其日历。 例如,可以请求 https://graph.microsoft.com/User.Read
和 https://graph.microsoft.com/Calendar.Read
范围。
MSAL 维护一个令牌缓存(对于机密客户端应用程序,则会维护两个),获取令牌后会缓存令牌。 在许多情况下,尝试以无提示方式获取令牌会根据缓存中的令牌获取具有更多范围的另一个令牌。 此外,当某个令牌即将过期时可以刷新该令牌(因为令牌缓存中也包含一个刷新令牌)。
应用程序源代码应该先尝试以无提示方式从缓存中获取令牌。 如果方法调用返回“需要 UI”错误或异常,请尝试通过其他方式获取令牌。
有两个流不支持尝试以无提示方式获取令牌:
对于使用 OpenID Connect 授权代码流的 Web 应用程序,控制器中的建议模式为:
获取令牌的方法取决于应用程序是公共客户端还是机密客户端应用程序。
在公共客户端应用程序(桌面版和移动版)中,你可以:
对于机密客户端应用程序(Web 应用、Web API 或类似于 Windows 服务的守护程序应用),你可以:
当客户端请求访问令牌时,Microsoft Entra ID 还会返回一条身份验证结果,其中包含有关访问令牌的元数据。 此信息包含访问令牌的过期时间及其有效范围。 此数据可让应用执行访问令牌的智能缓存,而无需分析访问令牌本身。 身份验证结果公开:
你可以使用 MSAL 的令牌缓存实现来允许后台应用、API 和服务使用访问令牌缓存,以便在用户不在时代表用户继续执行操作。 如果后台应用和服务需要在用户退出前端 Web 应用后继续代表用户工作,则这样做特别有用。
如今,大多数后台进程都在需要使用用户的数据时使用应用程序权限,而无需用户在场进行身份验证或重新进行身份验证。 由于应用程序权限通常需要管理员同意,这需要特权提升,因此会遇到不必要的摩擦,因为开发人员不打算获得针对其应用的、超出用户最初同意的权限的权限。
GitHub 上的此代码示例演示了如何通过从后台应用访问 MSAL 的令牌缓存来避免这种不必要的摩擦:
备注
使用 身份验证代理以交互方式获取令牌时,身份验证代理将首先执行缓存查找,并返回缓存令牌(GitHub 问题 - acquireToken 使用缓存)。
MSAL 支持的几个平台在该平台库的文档中有其他令牌缓存相关信息。 例如:
培训
认证
Microsoft Certified: Identity and Access Administrator Associate - Certifications
演示 Microsoft Entra ID 的功能,以将标识解决方案现代化、实现混合解决方案和实现标识治理。
文档
Microsoft 身份验证库 (MSAL) 中的身份验证流支持 - Microsoft identity platform
了解 MSAL 支持的授权和身份验证流。
客户端应用程序配置 (MSAL) - Microsoft identity platform
了解使用 Microsoft 身份验证库 (MSAL) 的公共客户端和机密客户端应用程序的配置选项。
获取用于调用 Web API 的令牌(单页应用程序) - Microsoft identity platform
了解如何在单页应用中获取令牌,并使用 Microsoft 标识平台调用 Web API。