0

拜托,你能帮助我如何从 android 客户端获取 django OAuth2 Toolkit 访问令牌,就像我们使用 curl 一样?这几天我尝试了很多方法都徒劳无功。对于其他信息,我使用改造作为 android http 库。

4

1 回答 1

0

有不同的选项可以从 django Oauth2 工具包获取 Android 应用程序上的令牌,例如,您可以:

  1. 您可以从 Oauth 工具包中将您的应用程序创建为隐式,并将令牌从浏览器传递到您的 android 应用程序。

在这里,您可以了解如何将您的应用程序注册为 URL 方案的处理程序,这将允许您从浏览器返回到您的应用程序:

http://appurl.org/docs/android

(同样在最后一个链接中,您可以在幻灯片 20 中看到另一个示例)

这个问题解释了如何将数据从浏览器重定向并传递到手机:

从浏览器重定向到 Android 应用

这里有 Oauth 和 Android 之间的工作流程:

http://www.slideshare.net/briandavidcampbell/is-that-a-token-in-your-phone-in-your-pocket-or-are-you-just-glad-to-see-me-oauth- 20 和移动设备

它从第十五张幻灯片开始。

  1. 另一种选择是将您的应用程序定义为授权类型密码并执行请求令牌的请求:

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(LOGIN_API);
    
    
    // Add your data
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    
    
    nameValuePairs.add(new BasicNameValuePair("username", USERNAME));
    nameValuePairs.add(new BasicNameValuePair("password", PASSWORD));
    nameValuePairs.add(new BasicNameValuePair("grant_type", "password"));
    
    nameValuePairs.add(new BasicNameValuePair("client_id", CLIENT ID))
    nameValuePairs.add(new BasicNameValuePair("client_secrect", CLIENT SECRET));
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    
    // Execute HTTP Post Request
    HttpResponse response = httpclient.execute(httppost);
    

使用什么取决于您的应用程序的用例。

社区编辑:

HttpClient 在过去几年中已被弃用。这是一个替代代码:

        String data = URLEncoder.encode( "grant_type", "UTF-8" ) + "=" + URLEncoder.encode( "password", "UTF-8" );

        data += "&" + URLEncoder.encode( "username", "UTF-8" ) + "=" + URLEncoder.encode( USERNAME, "UTF-8" );

        data += "&" + URLEncoder.encode( "password", "UTF-8" ) + "=" + URLEncoder.encode( PASSWORD, "UTF-8" );

        data += "&" + URLEncoder.encode( "client_id", "UTF-8" ) + "=" + URLEncoder.encode( CLIENT_ID, "UTF-8" );

        data += "&" + URLEncoder.encode( "client_secret", "UTF-8" ) + "=" + URLEncoder.encode( CLIENT_SECRET, "UTF-8" );

        URL server = new URL( param.url );
        HttpURLConnection connection = ( HttpURLConnection ) server.openConnection();
        connection.setDoOutput( true );
        OutputStreamWriter osw = new OutputStreamWriter( connection.getOutputStream() );
        osw.write( data );
        osw.flush();

        int responseCode = connection.getResponseCode();

        if( responseCode == HttpStatus.SC_OK )
        {

            BufferedReader reader = new BufferedReader( new InputStreamReader( connection.getInputStream() ) );
            StringBuffer response = new StringBuffer();
            String line = "";
            while( ( line = reader.readLine() ) != null )
            {
                response.append( line );
            }
            Log.v( "Login", response.toString() );
        }
        else
        {
            Log.v( "CatalogClient", "Response code:" + responseCode );
        }
于 2015-04-03T17:33:31.540 回答