Amazon Cognito:从浏览器重定向到Android应用程序时,如何停止获取“ redirect_mismatch”错误

JHo*_*zer 13 redirect android oauth httprequest amazon-cognito

我正在尝试创建一个Android项目,在该项目中,我可以通过使用户在浏览器中登录Amazon Cognito来授权用户,然后该用户应重定向回我的应用程序。不幸的是,当浏览器打开时,没有到达正确的登录页面,而是不断出现此错误:

在此处输入图片说明

在我的AuthenticatorActivity.java中:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_authenticator);

    Uri authzUrl = Uri.parse("https://<myDomain>.auth.us-west-2.amazoncognito.com/login?response_type=token&client_id=<myClientId>&redirect_uri=myapp://mainAct");
    Intent launchBrowser = new Intent(Intent.ACTION_VIEW, authzUrl);
    startActivity(launchBrowser);
}
Run Code Online (Sandbox Code Playgroud)

在AndroidManifest中:

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:host="mainAct" android:scheme="myapp"></data>
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚我在做什么错。我错过了一步吗?

小智 11

请检查您的回调网址并注销网址。正确的格式是:

app_client_name:https://www.myapp.com/
Run Code Online (Sandbox Code Playgroud)

认知


Ram*_*mis 10

redirect_uri(第一张图片)必须与回调 URL 字段(第二张图片)中的相同。

第一张图片

在此输入图像描述

第二张图片(应用程序集成 -> AWS 下的应用程序客户端设置)

在此输入图像描述


rla*_*sch 8

好吧,我在这里留下一个小消息,供以后可能会发现它的人使用。我遇到了完全相同的问题,但是作为Cognito和IdP / SSO的新手,我不知道如何解决此问题。这是我为最终解决此问题所做的工作。我们正在与外部服务集成,并且遇到了此错误。在Chrome开发者工具->网络下,我开始记录该URL的访问,然后再次尝试SSO集成。列表中显示了一个URL,该URL通过重定向到URL访问了Cognito。该URL必须与Cognito的“回调URL”下列出的URL相同。

希望这可以节省将来的时间。

  • 简而言之...对 Cognito 端点的请求中的“redirect_uri”参数需要与 Cognito 用户池的应用程序客户端设置中找到的“回调 URL”相匹配。 (10认同)
  • 我只是来这里说我的 oauth 配置中有“http://localhost:3000/”(尾部斜杠),而我的 Cognito 用户池回调 URL 中有“http://localhost:3000”(无尾部斜线)。 ..当我让它们都有尾部斜杠时,这个错误就消失了。 (3认同)

Sau*_*Kar 8

扩展迪米特里斯 的答案/sf/answers/4231921291/

如果您为负载均衡器指定了 DNS Route53。您可以在回调 URL 中指定相同的内容。

https://www.example.com/oauth2/idpresponse

参考: https: //aws.amazon.com/premiumsupport/knowledge-center/elb-configure-alb-authentication-idp/


Osc*_*rez 6

redirectSignIn我犯的另一个愚蠢的错误是in的值完全错误,并且花了我几个小时才弄清楚aws-exports.js。当您通过 Amplify CLI 多次修改此配置的值时,它会附加一个逗号,将该值视为列表,为您提供如下所示的内容

 "redirectSignIn": "http://localhost:3000/,http://localhost:3000/,http://localhost:3000/,http://localhost:3000/",
Run Code Online (Sandbox Code Playgroud)

不幸的是,当使用 HostedUI 时,该值被视为字符串。


小智 5

这里未涵盖的答案(可能是由于最近更新的文档)是关于logout_uri. 如果您将注销 URL 设置为与登录 URL 不同的 URL,您将收到参数重定向不匹配错误redirect_uri

例如

Log in URL: http://localhost:3000/log_in.html
Call back URL(after login): http://localhost:3000/logged_in.html
Sign out URL(after logout): http://localhost:3000/logged_out.html
Run Code Online (Sandbox Code Playgroud)

我正在使用redirect_uri参数向自定义注销 URL 页面发送请求,如下所示

https://xxx.auth.ap-southeast-1.amazoncognito.com/logout?client_id=xxx&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Flogged_out.html
Run Code Online (Sandbox Code Playgroud)

这导致了重定向不匹配错误

我必须更改才能logout_uri使其正常工作。

https://xxx.auth.ap-southeast-1.amazoncognito.com/logout?client_id=xxx&response_type=code&logout_uri=http%3A%2F%2Flocalhost%3A3000%2Flogged_out.html
Run Code Online (Sandbox Code Playgroud)

PS:请确保AWS Cognito 控制台中的redirect_urilogout_uri与您的代码相同,否则将导致重定向不匹配错误

文档: https: //docs.aws.amazon.com/cognito/latest/developerguide/logout-endpoint.html#get-logout