有没有一种方法可以预先知道要使用哪个ad进行身份验证?

时间:2018-12-13 06:15:27

标签: azure-gov

我有一个需要进行身份验证的UWP应用,我想避免要求用户选择要使用哪个国家云进行身份验证。我可以尝试全部操作,但我希望有更好的方法来判断用户所属的Azure Active Directory(.us或.com)

1 个答案:

答案 0 :(得分:1)

本机应用程序可以通过将授权请求中的instance_aware参数传递给全局Azure AD端点来发现国家云的Azure AD端点。这是在acquireToken调用中完成的,在初始化身份验证上下文时,需要在其中传递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 /。众所周知/ openid配置

对于Azure政府, tenant_region_scope 字段中的值“ USG”或“ USGov”将指示应使用login.microsoftonline.us的租户。

我希望这会有所帮助。让我知道是否可以。

伯尼