我正在编写一个 Android 应用程序,它将使用 OAuth2 对我控制的 Web 服务器进行身份验证。
我在客户端使用 Apache Amber,在服务器端使用 oauth2app 和 Django。
从客户端,我可以生成一个授权请求,并启动一个浏览器活动,该活动进入一个页面询问是否允许客户端访问,并在肯定回答后重定向到一个带有“代码”参数的页面。
但是如何将“代码”返回给我的客户,以便发出后续的 access_token 请求?
我需要完全绕过浏览器吗?那将如何运作?
我相信你在这里有几个选择。
该redirect_uri
参数将向服务器指示它应该将代码发送到哪里。从ouath2app
文档:
如果请求被授权,Authorizer:grant_response() 会将对象序列化为 JSON 响应,并将重定向响应返回到客户端的 redirect_uri,其中包含作为查询字符串参数 (response_type CODE) 传递的授权代码或作为 URI 片段传递的访问令牌的信息.
如此武装:
如果该值是您服务器上的一个位置,那么您的移动浏览器将获取该值作为重定向的一部分。具体来说,您正在尝试读取重定向中的 URI 片段。我相信这是像您这样的应用程序的预期用途。在“检索访问令牌”部分下,这篇博文似乎有可能相关的代码。
或者,正如您所指出的,您可以将令牌发送到服务器上的不同处理程序,然后将其传递回您的客户端。它必须是服务中定义的回调 URL。
我发现了一篇不同的博客文章,专门针对 OAuth 2:
http://blog.doityourselfandroid.com/2011/08/06/oauth-2-0-flow-android/
诀窍是启动一个新的 Activity,其内容由 WebView(而不是布局)提供。您可以将处理程序附加到在重定向到包含“代码”参数的页面时调用的 WebView。
博客文章中的一些细节涉及 Google API,但到目前为止,我的实验表明它适用于我的情况。