【问题标题】:Authentication response received without expected accessToken收到的身份验证响应没有预期的 accessToken
【发布时间】:2020-08-25 04:06:13
【问题描述】:

我正在使用https://github.com/Azure-Samples/active-directory-b2c-ios-swift-native-msal 并且可以完全通过交互式登录流程,但我从未正确取回令牌。当我在 AD B2C 门户中对策略执行运行流程时,我会在重定向到 jwt.ms 时取回令牌。

我也启用了详细和 pii 日志记录。授权 url 解析正确。

我还为 Azure 门户中的隐式流启用了访问令牌和 ID 令牌。我试过传入一个空白的范围数组以及“openid”/等,这告诉我这些是保留的,不能传入。

如果我有令牌,我打算使用 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=REJEQTM3MDAtMUNGMC00MEVGLTkwRTMtRUU0NDUxOTIxNjgy&client_info=eyJ1aWQiOiI5MmMyMWFmZS04MmRmLTQyZmQtOGQxZC1kOTM5MzIxNzJiZjgtYjJjXzFfdGVzX3NpZ25fdXBfYW5kX3NpZ25faW4iLCJ1dGlkIjoiYzc5OTBkMTAtN2RkMy00Y2MxLTg0NDAtYmFlNjM3NmYzZjdkIn0&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

【问题讨论】:

    标签: azure-ad-b2c msal


    【解决方案1】:

    此问题的解决方案是我想为其他人发布的解决方案,因为它确实可以对文档或错误代码进行一些改进。我不认为它只适用于 Azure Function api。

    在 azure b2c 门户中,如果您运行登录流程,您的浏览器将显示 openid 范围(可能也有配置文件)。因此,您会认为在使用 MSAL 时,您也会将其作为范围传递。如果这样做,您会收到一条错误消息,指出 openid 和 profile 是 MSAL 管理的保留范围,并且不传递它们。

    您会认为这很好,它是为您处理的,并且不会导致您没有获得令牌并继续寻找其他问题的问题......从而将范围保留为空白数组。您甚至可能不需要在您的 api 中设置特殊范围或权限来限制用户。

    但是,如果你在 azure b2c 租户区域中“公开一个 api”,它会声明你必须创建至少一个自定义范围和至少一个权限,并且你必须请求至少一个自定义范围。此外,您必须设置 App ID URI。创建一个自定义范围,通过 MSAL 将其传递,然后您将获得您的令牌。

    因此,在从 Azure 门户运行流时,您不需要自定义范围或指定 App ID Uri,但如果您使用的是 MSAL,则需要这样做。这一定是有原因的,但目前对我来说真的没有意义。

    希望这对某人有所帮助。

    【讨论】:

      【解决方案2】:

      您可以使用implicit flow 获得访问令牌和 ID 令牌。如果您得到 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
      &response_type=id_token+token
      &redirect_uri=xxxxx
      &response_mode=fragment
      &scope=openid%20offline_access%20https%3A%2F%2F{tenant}.onmicrosoft.com%2Fxxxx%2Fuser_impersonation
      &state=123456
      &nonce=12345
      

      【讨论】:

      • 您好帕梅拉,感谢您的帮助。我正在努力找出如何更改示例中的响应类型。可能在某些 MSAL 对象上设置属性?我也找不到如何检查正在使用的 url 以查看其他可能设置不正确的内容。
      • @JosephBittman 该示例基于 Swift 的方法。您无法添加属性。您是否尝试添加像https://contoso.onmicrosoft.com/api/read 这样的范围?参见doc:当请求访问令牌时,客户端应用程序需要在请求的范围参数中指定所需的权限。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多