为 OAuth 身份验证处理重定向 URI 的最佳方式是什么?
在一些项目中,我曾经启动一个等待身份验证被发回的网络服务器。有什么方法可以在没有本地 Web 服务器的情况下触发任何类型的代码,还是推荐的方法?
我不是在寻求有关任何特定语言的帮助,这更像是一个与语言无关的问题。
最佳答案
旁注:漂亮的头像...:)
确定最佳方法将取决于确切的场景和您的应用程序可能有的任何其他要求,但是,我们可以查看一些选项以及选择它们的可能含义。
OAuth 2.0 specification建议使用嵌入式用户代理或依赖外部用户代理来解决此问题。
嵌入式用户代理可以让您更好地控制 UI 方面,但是,通过利用外部用户代理,您的用户可能会从已经建立的 session 中受益,而不必再次输入凭据。
对于外部用户代理,我们有几种选择:
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 工程师。
关于redirect - 非 Web 应用程序的 OAuth 重定向 URI 替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40367795/