首页 > 解决方案 > Xamarin.Auth 是否可以通过服务器端访问令牌检索支持授权代码流,如果不支持,为什么不支持/什么可以?

问题描述

我已经看到很多帖子推荐在 Xamarin 中使用 Xamarin.Auth 进行 SSO,但是查看了教程以及 GitHub 入门wiki(其中说它支持“授权代码流”,但似乎需要来自客户端的密钥来获取身份验证代码,这不是我想要的)并在网络上搜索“Xamarin.Auth 隐式流”毫无结果”和“Xamarin.Auth 授权代码流”,在我看来,Xamarin Auth 仅支持隐式流,这比连接到后端 Web 服务器应用程序的本机应用程序的授权代码流安全性差。我是否正确理解 Xamarin.Auth 只能支持隐式流(要求将访问令牌发送到客户端,并且 client_secret 不能保留在服务器端并作为检索的一部分在服务器端发送访问令牌),

此外,即使与我推荐的其他库的流程似乎也可以检索客户端的访问令牌 - AppAuth 支持 PKCE,这是对没有 PKCE 的安全改进,但我看到的帖子在这里这里这里仍然显示了它的示例所有检索客户端上的访问令牌。在我见过的一些帖子(例如这里)中也推荐使用 Auth0,但我在这里看到的示例也检索客户端上的访问令牌。

网站不这样做是有原因的吗?是否有任何人都可以指向我的示例或 API 文档,以获取一个支持仅在 Xamarin 应用程序中检索授权代码客户端的库?(然后分别在服务器端,使用它来使用客户端密钥检索访问令牌,不一定使用相同的安全库,因为它不需要是 Xamarin 代码 - 我相信这个服务器端部分很漂亮标准的东西 - 例如这里为 Auth0 概述的)?

标签: xamarinxamarin.formssingle-sign-onxamarin.auth

解决方案


Xamarin.Auth 支持授权代码流。正如您在教程中发现的那样,Xamarin.Auth 的 OAuth2Authenticator 类有一个名为“Client Secret”的参数,连同其他提供的参数,Xamarin.Auth 能够处理授权码交换部分并将访问令牌直接返回给您,它看起来这部分没有发生,但实际上它发生了。

深入研究 OAuth2Authenticator源代码,VerifyOAuth2FlowResponseType 方法显示 Xamarin.Auth 提供了授权代码流和隐式流。有关更多详细信息,您可以阅读代码以及OAuth 2.0 授权框架

这是来自客户端授权代码流示例。


推荐阅读