我有一个需要进行身份验证的 UWP 应用程序,我想避免要求用户选择要使用哪个国家云进行身份验证。我可以全部尝试,但我希望有更好的方法来判断用户属于哪个 Azure Active Directory(.us 或 .com)
1 回答
通过将授权请求中的 instance_aware 参数传递给全局 Azure AD 终结点,本机应用程序可以发现国家云的 Azure AD 终结点。这是在 acquireToken 调用中完成的,在初始化 Authentication 上下文时,您需要传入 instance_aware = true 作为额外的查询参数。
从身份验证结果中,您可以读取并存储 cloud_instance_host_name 属性以了解正确的 Azure AD 终结点。您必须将此值作为权限传递,以重新初始化 Authentication 上下文,以使后续的 acquireTokenSilent 调用成功。
下面是一个示例 ADAL.Net 代码片段:
var authenticationContext= new AuthenticationContext(Authority, false, new TokenCache());
var authenticationResult = await authenticationContext.AcquireTokenAsync(resource,
clientId,
redirectUri,
platformParameters,
userIdentifier,
"instance_aware=true"
);
此外,这里是使用 instance_aware 参数的示例 OAuth 请求和响应:
要求:
https://login.microsoftonline.com/common/oauth2/authorize?
response_type=code&
client_id=f5d01c1c-abe6-4207-ae2d-5bc9af251724&
instance_aware=true&
redirect_uri=http://localhost/appcheck&
resource=00000002-0000-0000-c000-000000000000
回复:
http://localhost/appcheck?
code=AQABAAIAAQDnLpu3ikefR73l_aNlxt5x0ulCIcjaTlOoWp412SJ2Oxlih65_h_Ju3OdOqpEy-mz0giFzZtU2_MbIgSG12e6RjwxpcaXaVPene_lMtmR2DPexUZZ3QhFRl8Vgl76SidX_nJ1CN-hJAejCi139FG_YZit4ePbiNySC3zR9GcP3B3St7HDsdEhMh1Vi1XHSSKfpgVqzLnOiBSO_jXrm1WJVqXSlt4_M_KO92Gdpbpy8H7zpsRg0O6blbuSw_83YUcj0w1gEfByHZP2Hk5AToDy_DWepPqJ0GWOJYeKcfIiEFleNYaeyEJDDuMyFhV16IOT28mq1oNOWL0dnhjwr-OV0JnyajQCT_LZzapxp7Y-8jSPDgW6SR878sgrq6CS2z3Zos8_T31n4DucQaPqv2Ae_jxlGHHSENBFy2RhHy397B7BBohXGqhDj_OdIroimDOJGVewn612gQOA6-9p0llv-PNd7vj9VZL-9Q8kEuYuhTqaBsH3yKm6y9FfgxMWovVkYtDt4YgxbqCV2Wb_lzImtyTHKxazn6YhH6R2pCvFdVSAA&
cloud_instance_name=microsoftonline.us&
cloud_instance_host_name=login.microsoftonline.us&
cloud_graph_host_name=graph.windows.net&
msgraph_host=graph.microsoft.com&
session_state=899b8a55-034f-4dcd-8b4b-888b7874b041
“抽查”用户所属的云/AAD 环境的一种方法是调用 Azure AD OpenID Connect 发现端点:
https://login.microsoftonline.com/place_tenantname_or_tenantid_here/.well-known/openid-configuration _ _
对于 Azure 政府, tenant_region_scope字段中的值“USG”或“USGov”将指示应使用 login.microsoftonline.us 的租户。
我希望这有帮助。如果没有,请告诉我。
伯尼