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

时间:2017-10-26 02:22:59

标签: azure amazon-web-services oauth openid azure-ad-b2c

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

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

  1. 我创建了一个B2C租户并在租户中设置了一个“应用程序”以及一个SignUpAndSignInPolicy。应用程序启用了本机和Web客户端,并且还允许隐式流程。
  2. 我已将Azure B2C租户配置为AWS中的身份提供商,并为IdP创建了必要的角色。
  3. 我创建了一个AWS Cognito Identity Pool并将其配置为使用上述IdP
  4. 我正在使用MSAL库对Azure B2C进行身份验证,特别是MSALPublicClientApplication.init(clientId, kAuthority)方法后跟acquireToken
  5. 这将在浏览器中显示交互式登录,并通过自定义URL将令牌返回给应用程序。该令牌有效,我已使用JWT tool验证了它。
  6. 然后我使用在步骤3中创建的Cognito Identity Pool和自定义identityProviderManager设置AWSCognitoCredentialsProvider,该类是我根据AWS文档实现了getToken和logins方法的类。
  7. 然后我通过登录方法中的“return AWSTask([”providerName:“id_token”]语句将令牌从第5步传递到Cognito。
  8. 经过大量的反复尝试后,我已经设法完成了大部分障碍,但我现在从AWS获得了令牌验证错误,具体来说:

      

    错误:错误Domain = com.amazonaws.AWSCognitoIdentityErrorDomain Code = 8   “(null)”UserInfo = {__ type = NotAuthorizedException,message = Invalid   登录令牌。无法验证签名令牌。}

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

    AWS中没有很多可以配置身份提供程序的内容,例如机密,范围或任何内容,因此我不确定在哪里查看。

    我希望对于经验丰富的OpenID专业人员来说,这个错误信息对我来说意味着更多。

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

    非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您的设置看起来是正确的。不确定MSAL库,但直接从Azure B2C控制台测试时,根据您是否在授权URl中提到了您的登录策略(使用' p'参数),您会得到不同的令牌。没有这个参数的那个可以工作但是带有它的那个没有。与OIDC Discovery的工作方式及其在AWS IAM控制台中的配置方式有关。