在国家/地区云环境中使用 MSAL
国家/地区云又称为主权云,是 Azure 的物理独立实例。 Azure 的这些区域可帮助确保数据驻留、主权及合规性要求在地理边界内得到遵从。
除了 Microsoft 全球云以外,Microsoft 身份验证库 (MSAL) 使得国家/地区云中的应用程序开发人员能够获取令牌,以便进行身份验证并调用受保护的 Web API。 这些 Web API 可以是 Microsoft Graph 或其他 Microsoft API。
包括全球 Azure 云在内,Microsoft Entra ID 在以下国家/地区云中部署:
本指南演示了如何登录到工作和学校帐户、获取访问令牌,并在 Azure 政府云环境中调用 Microsoft Graph API。
Azure 德国(Microsoft 云德国版)
如果尚未从 Azure 德国迁移应用程序,请按有关如何从 Azure 德国进行迁移的 Microsoft Entra 信息中的说明开始迁移。
先决条件
在开始之前,请确保满足以下先决条件。
选择合适的标识
Azure 政府版应用程序可以使用 Microsoft Entra 政府版标识和 Microsoft Entra 公共版标识对用户进行身份验证。 因为任意这些标识都可以使用,所以需决定应为方案选择哪个颁发机构终结点:
- Microsoft Entra 公共版:如果组织已有 Microsoft Entra 公共版租户,支持 Microsoft 365(公共或 GCC)或其他应用程序,则通常使用此标识。
- Microsoft Entra 政府版:如果组织已有 Microsoft Entra 政府版租户,支持 Office 365(GCC High 或 DoD),或者正在 Microsoft Entra 政府版中创建新的租户,则通常使用此标识。
确定之后,还需特别考虑在哪里执行应用注册。 如果为 Azure 政府版应用程序选择了 Microsoft Entra 公共版标识,则必须在 Microsoft Entra 公共版租户中注册该应用程序。
获取 Azure 政府版订阅
若要获取 Azure 政府版订阅,请参阅管理和连接 Azure 政府版订阅。
如果没有 Azure 政府版订阅,请在开始之前创建一个免费帐户。
若要详细了解如何使用特定编程语言的国家/地区云,请选择与语言相匹配的选项卡:
可以使用 MSAL.NET 登录用户、获取令牌并在国家/地区云中调用 Microsoft Graph API。
以下教程演示了如何生成 ASP.NET Core Web 应用。 此应用使用 OpenID Connect,通过隶属于某个国家/地区云的组织中的工作和学校帐户来登录用户。
若要启用适用于主权云的 MSAL.js 应用程序,请执行以下操作:
以下是示例颁发机构:
"authority": "https://login.microsoftonline.us/Enter_the_Tenant_Info_Here"
下面是 Microsoft Graph 终结点的示例,范围如下:
"endpoint" : "https://graph.microsoft.us/v1.0/me"
"scope": "User.Read"
下面是使用主权云对用户进行身份验证并调用 Microsoft Graph 的最小代码:
const msalConfig = {
auth: {
clientId: "Enter_the_Application_Id_Here",
authority: "https://login.microsoftonline.us/Enter_the_Tenant_Info_Here",
redirectUri: "/",
}
};
// Initialize MSAL
const msalObj = new PublicClientApplication(msalConfig);
// Get token using popup experience
try {
const graphToken = await msalObj.acquireTokenPopup({
scopes: ["User.Read"]
});
} catch(error) {
console.log(error)
}
// Call the Graph API
const headers = new Headers();
const bearer = `Bearer ${graphToken}`;
headers.append("Authorization", bearer);
fetch("https://graph.microsoft.us/v1.0/me", {
method: "GET",
headers: headers
})
若要启用适用于主权云的 MSAL Python 应用程序,请执行以下操作:
在特定门户中注册应用程序,具体取决于云。 有关如何选择门户的详细信息,请参阅应用注册终结点
使用存储库中的任何示例并对配置进行适当更改,具体取决于云(如后文所述)。
根据应用程序注册所在的云,使用特定的颁发机构。 有关不同云对应颁发机构的详细信息,请参阅 Microsoft Entra 身份验证终结点。
以下是示例颁发机构:
"authority": "https://login.microsoftonline.us/Enter_the_Tenant_Info_Here"
调用 Microsoft Graph API 时,需要一个特定于所用云的终结点 URL。 若要查找适合于所有国家/地区云的 Microsoft Graph 终结点,请参阅 Microsoft Graph 和 Graph 资源管理器服务根终结点。
下面是 Microsoft Graph 终结点的示例,范围如下:
"endpoint" : "https://graph.microsoft.us/v1.0/me"
"scope": "User.Read"
若要为主权云启用适用于 Java 的 MSAL 应用程序,请执行以下操作:
以下是示例颁发机构:
"authority": "https://login.microsoftonline.us/Enter_the_Tenant_Info_Here"
下面是 Graph 终结点的示例,范围如下:
"endpoint" : "https://graph.microsoft.us/v1.0/me"
"scope": "User.Read"
适用于 iOS 和 macOS 的 MSAL 可用于在国家/地区云中获取令牌,但在创建 MSALPublicClientApplication
时需要进行额外配置。
例如,如果希望应用程序成为国家/地区云(此处为美国政府)的多租户应用程序,可以编写:
MSALAADAuthority *aadAuthority =
[[MSALAADAuthority alloc] initWithCloudInstance:MSALAzureUsGovernmentCloudInstance
audienceType:MSALAzureADMultipleOrgsAudience
rawTenant:nil
error:nil];
MSALPublicClientApplicationConfig *config =
[[MSALPublicClientApplicationConfig alloc] initWithClientId:@"<your-client-id-here>"
redirectUri:@"<your-redirect-uri-here>"
authority:aadAuthority];
NSError *applicationError = nil;
MSALPublicClientApplication *application =
[[MSALPublicClientApplication alloc] initWithConfiguration:config error:&applicationError];
适用于 iOS 和 macOS 的 MSAL 可用于在国家/地区云中获取令牌,但在创建 MSALPublicClientApplication
时需要进行额外配置。
例如,如果希望应用程序成为国家/地区云(此处为美国政府)的多租户应用程序,可以编写:
let authority = try? MSALAADAuthority(cloudInstance: .usGovernmentCloudInstance, audienceType: .azureADMultipleOrgsAudience, rawTenant: nil)
let config = MSALPublicClientApplicationConfig(clientId: "<your-client-id-here>", redirectUri: "<your-redirect-uri-here>", authority: authority)
if let application = try? MSALPublicClientApplication(configuration: config) { /* Use application */}
后续步骤
有关每种云对应的 Azure 门户 URL 和令牌终结点的列表,请参阅国家/地区云身份验证终结点。
国家云文档: