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