Есть ли способ узнать, какой aad использовать для аутентификации заранее? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть приложение UWP, которое необходимо аутентифицировать, и я бы не хотел, чтобы пользователь выбирал, в каком национальном облаке аутентифицироваться.Я мог бы просто попробовать их все, но я надеюсь, что есть лучший способ определить, к какому Azure Active Directory принадлежит пользователь (.us или .com)

1 Ответ

0 голосов
/ 13 декабря 2018

Собственные приложения могут обнаружить конечную точку Azure AD для национального облака, передав параметр instance_aware в запросе авторизации в глобальную конечную точку Azure AD.Это делается в вызове acquToken, где вам нужно передать instance_aware = true в качестве дополнительного параметра запроса при инициализации контекста аутентификации.

Из результата аутентификации вы можете прочитать и сохранить атрибут cloud_instance_host_name, чтобы узнатьправильная конечная точка Azure AD.Вы должны передать это значение как полномочие для повторной инициализации контекста аутентификации для последующих вызовов acquTokenSilent для успешного выполнения.

Ниже приведен пример фрагмента кода ADAL.Net:

var authenticationContext= new AuthenticationContext(Authority, false, new TokenCache());

var authenticationResult = await authenticationContext.AcquireTokenAsync(resource,  
                                        clientId,  
                                        redirectUri,  
                                        platformParameters,  
                                        userIdentifier,  
                                        "instance_aware=true"
                                        );

Кроме того,Вот пример запроса OAuth и ответов с использованием параметра instance_aware:

Запрос:

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, «USG» или «USGov» в качестве значения в поле tenant_region_scope будут указывать арендаторов, которые должны использовать login.microsoftonline.us.

Надеюсь, это поможет.Дайте мне знать, если нет.

Берни

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...