#azure-ad-b2c #msal
#azure-ad-b2c #azure-ad-msal
Вопрос:
Я использую https://github.com/Azure-Samples/active-directory-b2c-ios-swift-native-msal и могу полностью пройти интерактивный процесс входа в систему, но я никогда не получаю токены обратно должным образом. Когда я выполняю поток выполнения политики на портале AD B2C, я получаю токены обратно при перенаправлении на jwt.ms .
Я также включил подробное ведение журнала и ведение журнала pii. URL-адрес авторизации разрешен должным образом.
Я также включил как токен доступа, так и токен идентификатора для неявного потока на портале azure. Я попытался передать пустой массив областей, а также OpenID / etc, И это говорит мне, что они зарезервированы и не для передачи.
Если бы у меня был токен, я планирую использовать функции Azure (не график, как в примере).
Я был бы очень признателен за любую помощь, поскольку я потратил много времени на изучение этого. Я увидел в потоке stackoverflow, что «msal» неверно указано в документации, и обновил до msauth.clientid://auth, что я также пытался безрезультатно.
Я вхожу в систему как локальная учетная запись, которая была создана ранее.
%@ TID=29077 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:00] Requiring default broker type due to app being built with iOS 13 SDK
%@ TID=29077 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:00 - FCCF8212-9E72-4E6E-8C3A-042F71EDEAA0] [MSAL] -[MSALPublicClientApplication acquireTokenWithParameters:(
)
extraScopesToConsent:(null)
account:(null)
loginHint:(null)
promptType:MSALPromptTypeSelectAccount
extraQueryParameters:(null)
authority:<MSALB2CAuthority: 0x600000b100e0>
webviewType:MSALWebviewTypeSafariViewController
customWebview:No
correlationId:(null)
capabilities:(null)
claimsRequest:(null)]
%@ TID=29077 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:00 - FCCF8212-9E72-4E6E-8C3A-042F71EDEAA0] [MSAL] Beginning interactive flow.
%@ TID=29077 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:00 - FCCF8212-9E72-4E6E-8C3A-042F71EDEAA0] [MSAL] Resolving authority: https://......b2clogin.com/tfp/......onmicrosoft.com/B2C_1_tes_sign_up_and_sign_in, upn: (null)
%@ TID=29077 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:00 - FCCF8212-9E72-4E6E-8C3A-042F71EDEAA0] [MSAL] Resolved authority, validated: NO, error: 0
%@ TID=29077 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:00] Start background app task with type 0
Received callback!
Received callback!
Received callback!
Received callback!
Received callback!
msauth.com.microsoft.identity.client.sample.msaliosb2c://auth/?state=REJEQTM3MDAtMUNGMC00MEVGLTkwRTMtRUU0NDUxOTIxNjgyamp;client_info=eyJ1aWQiOiI5MmMyMWFmZS04MmRmLTQyZmQtOGQxZC1kOTM5MzIxNzJiZjgtYjJjXzFfdGVzX3NpZ25fdXBfYW5kX3NpZ25faW4iLCJ1dGlkIjoiYzc5OTBkMTAtN2RkMy00Y2MxLTg0NDAtYmFlNjM3NmYzZjdkIn0amp;code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMCIsInppcCI6IkRlZmxhdGUiLCJzZXIiOiIxLjAifQ..utC9PGZsSCucrxsi.YX7_K2EsSN0FC7xmbBuiih9kpX_kiiAfk18ttdcf1fgzbJdpxtlKE45LDow49h-CTu4BeNLCGeUD4ZPPUqEs6zrahnRppXbxpkEZFejllpumfjaCI6Au0BUWjRWX_ChHSTPY2d2C6X0rNpWSp9mvRDKwQlR-4f-jBzqpHGwGJhSTI2eO4dXE1P_wJJ0tAE5BVARbnb5bEPY6RMCpcXHDakGhcaQzBqXsmGIKuZASWOKGKgB-k-aXj2wB-DuprEIK168Gmvy41IO20C9kGtYpezcFtbEeH-yp53nu-2pdw8dxV3IVpECyQzYw3mVL0_wb0LsMN4dHonHqnXcjdghxSv1X75Haz_HRyisZTZ0bCHEx-4IN8mkEokIvJG54zM5DY36ZgIbJEUGhmx_dJinphRqjD13utQAhVyrHjA1_oGnPVZ_RJJh2pL_MRPaaWrj3kbcpudxjvPwdA9OIur6t71BIVA-uAbnMn-J6ORlbuPhQT4p-6XDC1h068huqjKgCEWADoIFzH7Hd8gOHjrc-Nc0EXY33ln_NXz9pYLtde-WhTC4O_gmE36Hw4p_4cD0_FfyWb57sfb_5GUllhkZKJWVfxa2V7WD28whVlEn0ksbkMbedBsuhcX0.di8cR8t0DcTKLlPvfJrLZQ
%@ TID=29077 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:09] Stop background task with type 0
%@ TID=29077 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:09 - FCCF8212-9E72-4E6E-8C3A-042F71EDEAA0] [MSAL] No cached preferred_network for authority
%@ TID=29077 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:09 - FCCF8212-9E72-4E6E-8C3A-042F71EDEAA0] [MSAL] Sending network request: (not-null), headers: (not-null)
%@ TID=31634 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:09] session:didReceiveChallenge:completionHandler - nsurlauthenticationmethodservertrust. Host: ........b2clogin.com. Previous challenge failure count: 0
%@ TID=31638 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:09 - FCCF8212-9E72-4E6E-8C3A-042F71EDEAA0] [MSAL] Received network response: (not-null), error (null)
%@ TID=31638 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:09 - FCCF8212-9E72-4E6E-8C3A-042F71EDEAA0] [MSAL] Parsed response: (not-null), error (null), error domain: (null), error code: 0
%@ TID=31638 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:09 - FCCF8212-9E72-4E6E-8C3A-042F71EDEAA0] Unsuccessful token response, error Error Domain=MSIDErrorDomain Code=-51100 "(null)" UserInfo={MSIDCorrelationIdKey=FCCF8212-9E72-4E6E-8C3A-042F71EDEAA0, MSIDErrorDescriptionKey=Authentication response received without expected accessToken}
%@ TID=31638 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:09 - FCCF8212-9E72-4E6E-8C3A-042F71EDEAA0] [MSAL] Interactive flow finished result (null), error: -51100 error domain: MSIDErrorDomain
%@ TID=31638 MSAL 1.0.0 iOS Sim 13.6 [2020-08-25 03:38:09 - FCCF8212-9E72-4E6E-8C3A-042F71EDEAA0] [MSAL] acquireToken returning with error: (MSALErrorDomain, -50000) Authentication response received without expected accessToken
Ответ №1:
Решение этой проблемы — это то, что я хочу опубликовать для других, поскольку оно действительно могло бы потребовать некоторого улучшения документации или кодов ошибок. Я не думаю, что это применимо только к API функций Azure.
На портале azure b2c, если вы запустите поток входа, ваш браузер покажет область OpenID (возможно, у него также был профиль). Итак, можно подумать, что при использовании MSAL вы также передадите это как область действия. Если вы это сделаете, вы получите сообщение об ошибке, в котором говорится, что OpenID и profile являются зарезервированными областями, которыми управляет MSAL, и не передавать их.
Вы могли бы подумать, что это здорово, это обрабатывается за вас и не вызывает проблемы, из-за которой вы не получаете свои токены, и двигаться дальше и искать другие проблемы… в результате чего области видимости остаются пустым массивом. Возможно, вам даже не потребуется специальная область или разрешение в вашем api для ограничения пользователей.
Однако в итоге оказалось, что если вы перейдете к «предоставить API» в области клиента azure b2c, в нем будет указано, что вы должны создать по крайней мере одну пользовательскую область и по крайней мере одно разрешение и что вы должны запросить по крайней мере одну пользовательскую область. Кроме того, необходимо задать URI идентификатора приложения. Создайте пользовательскую область, передайте ее через MSAL, и вы получите свой токен.
Таким образом, вам не нужна пользовательская область или вы не указали Uri идентификатора приложения при запуске потока с портала azure, но это необходимо, если вы используете MSAL. Для этого должна быть причина, но на данный момент для меня это не имеет смысла.
Надеюсь, это кому-то поможет.
Комментарии:
1. не могли бы вы, пожалуйста, добавить фрагмент для этого?
Ответ №2:
Вы могли бы получить как токен доступа, так и токен идентификатора с неявным потоком. Если вы получаете id_token, но не access_token, проверьте response_type
, чтобы он содержал токен, а не только id_token.
Примечание: обязательно добавьте формат области, подобный этому: https://YOUR_TENANT.onmicrosoft.com/api/user_impersonation
GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/authorize?
client_id=xxxxxxx
amp;response_type=id_token token
amp;redirect_uri=xxxxx
amp;response_mode=fragment
amp;scope=openid offline_access https://{tenant}.onmicrosoft.com/xxxx/user_impersonation
amp;state=123456
amp;nonce=12345
Комментарии:
1. Привет, Памела, спасибо за вашу помощь. Я изо всех сил пытаюсь выяснить, как изменить тип ответа в примере. Возможно, установлено свойство для какого-либо объекта MSAL? Я также не могу найти, как проверить, какой URL используется, чтобы увидеть, что еще может быть установлено неправильно.
2. @JosephBittman Пример основан на методе для Swift. Не удалось добавить свойство. Вы пытались добавить область, подобную
https://contoso.onmicrosoft.com/api/read
? Смотрите документ : Когда запрашивается токен доступа, клиентскому приложению необходимо указать желаемые разрешения в параметре scope запроса.
Ответ №3:
Ответ действительно помог мне встать на правильный путь, но проблема была немного иной.
Я использовал следующие области:https://tenantname.onmicrosoft.com/APINAME/write
https://tenantname.onmicrosoft.com/APINAME/read
Я реализовал это следующим образом:
kScopes = [«https://tenantname.onmicrosoft.com /(Строка(описывающая: kAPI))/написать», «https://tenantname.onmicrosoft.com /(Строка(описывающая: kAPI))/читать»]
Это не сработало, поскольку создало следующую строку «https://tenantname.onmicrosoft.com («APINAME»)/ прочитать». stackoverflow удаляет пару in между ними, но вы поняли суть.