非 Web 应用程序的 OAuth 重定向 URI 替代方案?

OAuth redirect URI alternatives for non-web applications?

处理 OAuth 身份验证的重定向 URI 的最佳方法是什么?

在一些项目中,我曾经启动一个等待身份验证被发回的网络服务器。有什么方法可以在没有本地网络服务器的情况下触发任何类型的代码,还是推荐的方法?

我不是在寻求有关任何特定语言的帮助,这更像是一个与语言无关的问题。

旁注:头像不错...:)

确定最佳方法将取决于具体情况以及您的应用程序可能具有的任何其他要求,但是,我们可以查看一些选项以及选择它们的可能含义。

OAuth 2.0 specification 提出了一些解决此问题的选项,使用嵌入式用户代理或依赖外部用户代理。

嵌入式用户代理可以让您更好地控制 UI 方面,但是,通过利用外部用户代理,您的用户可能会从已经建立的会话中受益,并避免再次输入凭据时间.

对于外部用户代理,我们有几个选项:

External user-agent - the native application can capture the response from the authorization server using a (1) redirection URI with a scheme registered with the operating system to invoke the client as the handler, (2) manual copy-and-paste of the credentials, (3) running a local web server, (4) installing a user-agent extension, or by (5) providing a redirection URI identifying a server-hosted resource under the client's control, which in turn makes the response available to the native application.

选项 1:

您使用您的应用程序在操作系统中注册的自定义方案配置重定向,这样当外部用户代理收到指示重定向到您的方案的响应时,您的应用程序将被调用。

选项 2:

您重定向到某个地方,它只显示一个带有代码的漂亮页面,并要求用户在您的应用程序中手动输入它。

选项 3:

您已经使用过这个,基本上应用程序会启动一个本地 Web 服务器,然后您将重定向配置为 http://localhost:[port]/

选项 4:

通过安装用户代理扩展程序,您将拥有代码 运行 可以自动将代码传送到您的应用程序的浏览器。

选项 5:

您配置了一个重定向 URI,该 URI 指向您托管的一些服务器端代码,并且您的客户端 Android 应用程序知道它可以从该 URL 获取代码。


有关此主题的更多信息,请查看:OAuth 2.0 for Native Apps

此外,如果您不想在需要服务器上的某些逻辑的选项上使用完整的服务器端,您可以通过编写服务器端来使用更少的代码行来完成相同的操作逻辑作为 Webtask(一定要使用自定义域)。

披露:我是一名 Auth0 工程师。