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登出/结束会话终结点
基础教程推荐
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01