Azure B2C与AWS Cognito联合身份的集成

Mar*_*rko 5 openid oauth azure amazon-web-services azure-ad-b2c

我正在将Azure B2C与AWS集成,即通过Azure B2C作为联合身份提供者设置AWS Cognito,并将其用于移动应用程序的登录目的。

在大多数情况下,我相信我已经正确配置了所有内容。这是我到目前为止所做的

  1. 我已经创建了一个B2C租户,并在该租户中设置了一个“应用程序”以及一个SignUpAndSignInPolicy。该应用程序同时启用了本机客户端和Web客户端,还允许隐式流。
  2. 我已将Azure B2C租户配置为AWS中的身份提供者,并为IdP创建了必要的角色。
  3. 我已创建一个AWS Cognito身份池并将其配置为使用上述IdP
  4. 我正在使用MSAL库向Azure B2C进行身份验证,特别是MSALPublicClientApplication.init(clientId, kAuthority)后跟的方法acquireToken
  5. 这将在浏览器中显示一个交互式登录名,并通过自定义URL向应用返回令牌。令牌有效,并且我已经使用JWT工具对其进行了验证。
  6. 然后,我AWSCognitoCredentialsProvider使用在步骤3中创建的Cognito身份池和自定义的identityProviderManager进行设置,该类是我根据AWS文档实现了getToken和logins方法的类。
  7. 然后,我通过登录方法中的“ return AWSTask([“ providerName:” id_token“]]语句将步骤5中的令牌传递给Cognito。

经过一番来回的努力,我设法克服了这一过程中的大部分障碍,但是现在我从AWS那里收到了令牌验证错误,特别是:

错误:错误Domain = com.amazonaws.AWSCognitoIdentityErrorDomain代码= 8“(null)” UserInfo = {__ type = NotAuthorizedException,消息=无效的登录令牌。无法验证已签名的令牌。}

谷歌搜索该错误确实不会产生大量结果,但是据我所知,应用程序中的事件顺序是正确的,但是AWS在与Azure通信时抱怨令牌的验证。

AWS中没有太多可配置的身份提供程序,例如机密,作用域或任何其他内容,因此我不确定在哪里查看。

我希望对于经验丰富的OpenID专业人士而言,此错误消息对我而言意味着更多。

我不确定的某些事情可能是相关的。1.在我当前未使用的应用程序下,Azure B2C具有“键”的概念,因为在实现中没有地方可以指定各种键。2.该MSALPublicClientApplication.init方法返回一个我随后用来调用的应用程序实例application.acquireToken(forScopes: kScopes)。我不知道该为作用域值添加什么,因为从我读到的内容来看,我只需要“ openid”和“ offline_access”,但是当我尝试指定这些值时,我收到一个错误,即默认情况下已经包含了它们并且可以在我的API调用中指定它们。但是,不允许将此字段留空,因此目前我不确定我是否正确的Azure B2C应用程序ID(以GUID的形式)。

多谢您的协助!

age*_*420 0

您的设置看起来正确。不确定 MSAL 库,但直接从 Azure B2C 控制台进行测试时,您会获得不同的令牌,具体取决于您是否在授权 URl 中提及您的登录策略(使用“p”参数)。没有这个参数的可以工作,但是有这个参数的不行。与 OIDC Discovery 的工作原理及其在 AWS IAM 控制台中的配置方式有关。