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

Azure B2C与AWS Cognito联合身份的集成,azure,amazon-web-services,oauth,openid,azure-ad-b2c,Azure,Amazon Web Services,Oauth,Openid,Azure Ad B2c,我正在将Azure B2C与AWS集成,即将AWS Cognito与Azure B2C设置为联合身份提供商,并将其用于移动应用程序的登录目的 在大多数情况下,我相信我已经正确地配置了一切。这就是我到目前为止所做的 我已经创建了一个B2C租户,并在租户中设置了一个“应用程序”以及一个SignupandSigningPolicy。应用程序同时启用了本机客户端和web客户端,还允许隐式流 我已将Azure B2C租户配置为AWS中的身份提供商,并为IdP创建了必要的角色 我已经创建了一个AWS Cog

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

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

  • 我已经创建了一个B2C租户,并在租户中设置了一个“应用程序”以及一个SignupandSigningPolicy。应用程序同时启用了本机客户端和web客户端,还允许隐式流
  • 我已将Azure B2C租户配置为AWS中的身份提供商,并为IdP创建了必要的角色
  • 我已经创建了一个AWS Cognito标识池,并将其配置为使用上述IdP
  • 我正在使用MSAL库向Azure B2C进行身份验证,特别是
    MSALPublicClientApplication.init(clientId,kAuthority)
    方法,然后是
    acquireToken
  • 这将在浏览器中显示交互式登录,并通过自定义url向应用程序返回令牌。令牌是有效的,我已使用验证
  • 然后,我使用在步骤3中创建的Cognito标识池和一个自定义identityProviderManager设置了一个
    AWSCognitoCredentialsProvider
    ,该类是我根据AWS文档实现getToken和logins方法的类
  • 然后,我通过logins方法中的“returnawstask”([“providerName:”id_token“)语句将步骤5中的令牌传递给Cognito
  • 经过大量的往返,我成功地克服了大部分障碍,但是我现在从AWS那里得到了一个令牌验证错误,特别是:

    错误:错误域=com.amazonaws.AWSCognitoIdentityErrorDomain代码=8 “(null)”UserInfo={uuuuu type=NotAuthorizedException,message=Invalid 登录令牌。无法验证已签名的令牌。}

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

    AWS中没有很多可以配置身份提供程序的功能,例如机密、作用域或任何其他功能,因此我不确定应该在哪里查找

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

    我不确定的一些事情可能与此相关。 1.Azure B2C在我当前未使用的应用程序下有一个“密钥”的概念,因为在我的实现中没有地方可以指定某种类型的密钥。 2.
    MSALPublicClientApplication.init
    方法返回一个应用程序实例,然后我使用该实例调用
    application.acquireToken(forScopes:kScopes)
    。我不知道scopes值应该放什么,因为根据我所读的内容,我只需要“openid”和“offline\u access”,但当我尝试指定它们时,我得到一个错误,默认情况下它们已经包括在内,并且我可以在API调用中指定它们。但是,我不允许将此字段留空,因此目前我有Azure B2C应用程序ID(GUID形式),我不确定该ID是否正确


    非常感谢您的帮助!

    您的设置看起来正确。不确定MSAL库是否正确,但直接从Azure B2C控制台进行测试时,根据您是否提到登录策略(使用“p”参数),您会得到不同的令牌在授权URl中。没有此参数的有效,但有此参数的无效。与OIDC发现如何工作以及如何在AWS IAM控制台中配置有关。

    令牌是用什么算法签名的?