Calling AppAuth sign out / endsession endpoint using IdentityServer4 in Flutter on iOS(在iOS上使用颤动中的标识服务器4调用AppAuth登出/结束会话终结点)
问题描述
我正在Ffltter中使用flutter_appauth包来处理针对IdentityServer4的授权码流,但找不到在iOS中调用/endsession
终结点的方法。
为了了解我正在尝试做什么,以下是我使用url_launcher
包实现的工作Android:
var signOutUrl = '${_endSessionUrl}?id_token_hint=${_idToken}&post_logout_redirect_uri=${AppConfig.oidcCallbackUri}';
await launch(signOutUrl);
使用相同的代码,iOS只是报告了一个一般性的PlatformException
,没有关于原因的更多细节,尽管该异常肯定与仅仅尝试启动URL完全绕过AppAuth有关。
this GitHub comment中的解决方案似乎在使用Okta时有效,但在使用IdentityServer4时,我收到了以下异常,该异常会立即终止颤动应用程序:
[DEVICE LOG] 2020-04-16 08:55:01.039163-0400 localhost Runner[18007]: (CoreFoundation) *** Terminating app due to uncaught exception 'Attempted to create a token exchange request from an authorization
response with no authorization code.', reason: 'Attempted to create a token exchange request from an authorization response with no authorization code.'
考虑到我的/endsession
终结点没有返回授权响应,这似乎是有意义的。
在任何情况下,使用EndSession URL调用授权终结点的解决方案充其量都是一种黑客攻击,但这似乎是一种"被接受"的方法。
我能找到的关于使用AppAuth的所有文档都说,只需在应用程序中"忘记"令牌就可以实现注销,但由于浏览器保留身份验证Cookie,因此重新登录是自动进行的。用户没有机会选择其他帐户。
还值得注意的是,这并不是特定于Ffltter、flutter_appauth
包或IdentityServer4的。This comment在原生AppAuth-iOS程序包上使用与上述相同的解决方案解决相同的问题。
绝对可以在iOS上注销(从而删除浏览器Cookie),但我完全不知道如何实现这一点。
推荐答案
当您调用授权和交换代码的方法时,需要添加一个额外的参数,名为&Quot;PromptValues&Quot;,值为‘Login’。这样,每次进行登录时,缓存中都没有值,并且总是请求新的登录。
我是从这篇文章openid/AppAuth-Android#215中得到这个解决方案的,其中有关于注销和删除浏览器历史记录和OpenID文档的评论
final AuthorizationTokenResponse result =
await appAuth.authorizeAndExchangeCode(
AuthorizationTokenRequest(
your_client_id,
your_localhost,
promptValues: ['login'],
discoveryUrl:
your_discovery_url,
scopes: [your_scopes],
),
);
这篇关于在iOS上使用颤动中的标识服务器4调用AppAuth登出/结束会话终结点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在iOS上使用颤动中的标识服务器4调用AppAuth登出/结束会话终结点


- android 4中的android RadioButton问题 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- Android - 拆分 Drawable 2022-01-01
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01