首页 > 解决方案 > 使用代码交换检索令牌时,iOS 上的 Flutter Auth 挂起

问题描述

我在颤振中有以下代码试图通过具有 PKCE 流的身份验证代码检索 oauth2 令牌:

final FlutterAppAuth appAuth = FlutterAppAuth();

final request = AuthorizationTokenRequest(
    B2C_CLIENT_ID,
    B2C_REDIRECT_URI,
    discoveryUrl: 'https://$B2C_DOMAIN/.well-known/openid-configuration',
    scopes: ['openid', 'profile', 'offline_access'],
    // promptValues: ['login']
);

final AuthorizationTokenResponse result =
    await appAuth.authorizeAndExchangeCode(request);

当此代码在 iOS 中运行时,浏览器会打开,我可以看到它尝试加载登录页面,但随后立即关闭。不会抛出异常或任何东西。该代码基本上挂起,appAuth.authorizeAndExchangeCode几乎就像它不知道浏览器已关闭一样。

我不确定是什么原因造成的。

discoveryUrl该代码正确地确定了使用(即它首先使用 发出 http 请求)显示凭据的 url,discoveryUrl但不确定为什么它基本上会挂起。

我在这里使用 azureb2c 进行身份验证。

编辑

好的,事实证明这是使用 azure b2c 的问题,特别是在使用不同的身份提供者进行尝试时,效果很好。

我设法找到问题并修复它现在登录页面显示在浏览器中。输入凭据后,浏览器关闭,但代码仍然挂起appAuth.authorizeAndExchangeCode(request);并且无法继续。

还发现了存在的问题。在github上:https ://github.com/MaikuB/flutter_appauth/issues/182

标签: iosflutterauthenticationoauth-2.0azure-ad-b2c

解决方案


flutter_appauth我设法按照插件的 Github 存储库上的以下答案解决了这个问题。

https://github.com/MaikuB/flutter_appauth/issues/182#issuecomment-840707729

最终,我所要做的就是在AuthorizationTokenRequest. (看起来 Azure AD 在重定向 url 的尾部斜杠上附加,这会导致 AppAuth 中的验证失败)。

我的应用程序在 Android 和 iOS 上都可以正常使用斜线。

PS 如果这对某人不起作用,请尝试按照相应线程https://github.com/MaikuB/flutter_appauth/issues/223中的建议调整您的应用注册中的重定向 URL 。


推荐阅读