首页 > 解决方案 > Flutter/dart:如何处理自定义 url 方案回调

问题描述

我正在尝试在 Flutter 中使用 Okta APIs 添加登录功能。在 Okta 中,在使用用户名和密码进行身份验证后,它返回一个 sessionToken,我必须将其与授权 api 交换以获取 api_token。

这是网址的样子

https://dev-test.okta.com/oauth2/default/v1/authorize?response_type=token&scope=openid&state=TEST&nonce=TEST&client_id=asdasasdasd&redirect_uri=com.okta.dev-test:/callback&sessionToken=201111ajXZ86MYTJAqGlo9SJrGN02sTRE364aBkmnBVFLq1lX0c7TL3

我在 IOS -> com.okta.dev-test 中为我的应用程序配置了一个自定义 url 方案

因此,一旦调用被发送,它就会重定向到它发布 api_token 的 redirectUri

com.okta.dev-test:/callback#access_token=eyJraWQiOiJ0Z0EzRERrQU9UaFZfU3g4bXZtOEdFOURtXzhZSGlMZEwzaDQtRzlOQW8wIiwiYWxnIjoiUlMyNTYifQ.eyJ2ZXIiOjEsImp0aSI6IkFULkNOYkE0OC1DUHRuNVBzSDNwVHR1dHg1VDlyRVA0U0pydkNFMWkzbnJNVTAiLCJpc3MiOiJodHRwczovL2Rldi01NTEzODAub2t0YS5jb20vb2F1dGgyL2RlZmF1bHQiLCJhdWQiOiJhcGk6Ly9kZWZhdWx0IiwiaWF0IjoxNTcxNDQxNTU3LCJleHAiOjE1NzE0NDUxNTcsImNpZCI6IjBvYTFpcHZlYTVtYURCenBFMzU3IiwidWlkIjoiMDB1MWx4M2E4b1pVVFRFNFUzNTciLCJzY3AiOlsib3BlbmlkIl0sInN1YiI6InByYXZpbmFyckBnbWFpbC5jb20ifQ.S9git7PzJF0RpIxULiSAmQFWkNlhG8KvwUZm8UDR68mNgVoUnfK5rXplO3tXZVRxLyzmcFgCXgU36lWc2-hOWF9NUWvgxf7PAmfdNKjdbveMvZmqyNPuiOcDDVvV-h6C0DYgTAo_5VSMPvTI0QerVmgOQ61yYmi12UH319T7OHirsEN1RhIS1ztHLj0CQuXtmSJoX-C5Ko7Mr3PbRkY6OxmgFbyDuTtxWxqTbn5JHXbNggozs48I_nIwurQOLSq8MGAeaUBToiqCfZNhciqpBpEtmJgg4sck-oZsiyA_ZB8HYpBhTmiJNVUsK4Ln6DsI4m2n3RnRd-DuE-KJnDDm7Q&token_type=Bearer&expires_in=3600&scope=openid&state=TEST

现在,当我在 webview 中打开这个 url 时,它能够识别 url 方案并在那里发布消息。但是当我尝试使用 http.get 来调用 url 时,它会出错

Exception has occurred.
ArgumentError (Invalid argument(s): No host specified in URI com.okta.dev-test:/callback)

有没有办法从回调中获取访问令牌并使用 http get 解决这个问题?或者有没有其他方法可以在不使用 webview 的情况下实现这一点?

提前致谢

标签: flutterdartdart-http

解决方案


要在 iOS 上处理 URL 方案,首先确保为 iOS配置了深度链接。抛出错误的原因是因为您的应用程序中没有任何配置可以处理com.okta.dev-test:/callback. 要处理此路径,您需要/callbackRoutes中进行配置。


推荐阅读