OAuth对你的数据和服务正在变成实际上的同意訪问协议在没有分享用户password。

实际上全部的有名公司像Twitter。Google,Yahoo或者LinkedIn已经实现了它。在全部流行的程序语言里有很多的库和代码样例也在你的d桌面程序。移动程序,或者web程序上实现了OAuth。

也有给Android的參考指南,然而他们中的大多数不是最新的,精确地或者在时间紧张的情况下理解是困难的。我们这里提供了几个easy的步骤来解释它怎么样用简单的方式完毕它。

首先,简答描写叙述OAuth是怎样工作的。它是基于加密。加密的地方:

1.一个token和一个一致的password。这个password有client从服务端请求到。

2.这个token通过用户被验证作为有效和被同意訪问他们的数据,然后

3.这个token被更新而且这个从那时候会被使用,直到通过同样的用户又一次调用授权。

这个在第一步被请求的token被叫做request token.也就是说你通常指定了你想要訪问的它服务的地方;它被叫做scope。

第二步被叫做authorization,这一步是控制通过一个回调传回到客户应用程序。

最后的token在第三步被接收叫做access token。这个能被使用非常长时间,它不会过期(可是。正如提到的。用户能在不论什么时候调用它)。它是一个短字符串。用一个一直的密钥字符串。而且一旦应用程序请求它,它能被用于登录HTTP请求。为的是让供应商验证它。全部三步对供应商有一个一致的URL。对于一个HTTP请求被发送的地方获取token或者维护它。

假设你须要更深入的描写叙述,在code.google.com上有一篇好文章使用API參照。而且还实用图很详尽的概述。

我们将使用卓越的signpost的java库来实现OAuth訪问到Gmail。仅仅须要下载signpost-core和signpost-commonshttp4包。把他们拷贝到lib目录下,右键project。在Properties/Java Build Path下你能把他们加入到build path中:

我们将实现OAuth支持通过一个背胶做OAUthHelper的帮助类。两个最重要的来被提供通过signpost的是OAuthConsumer和OAuthProvider。在跳到真正的连接曾经。我们首先设置下面步骤:

private
OAuthConsumer mConsumer;

private
OAuthProvider mProvider;

private
String mCallbackUrl;

public
OAuthHelper(String consumerKey, String consumerSecret,

String
scope, String callbackUrl)

throws
UnsupportedEncodingException {

mConsumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);

mProvider = new CommonsHttpOAuthProvider(

"https://www.google.com/accounts/OAuthGetRequestToken?scope="

+ URLEncoder.encode(scope, "utf-8"),

"https://www.google.com/accounts/OAuthGetAccessToken",

"https://www.google.com/accounts/OAuthAuthorizeToken?

hd=default");

mProvider.setOAuth10a(true);

mCallbackUrl = (callbackUrl == null ?

OAuth.OUT_OF_BAND : callbackUrl);

}

这个consumerKey和consumerSecret字符串依赖于你的client应用程序。你给两者能使用匿名。然后你或许想对供应商注冊你的应用程序,它将公布一个key和一个密钥给你的APP,为了訪问你一个用户的Gmail的收件范围是"https://mail.google.com/",这个授权的URLs是在帮助类的构造器中。

callbackUrl变量能被用于传递一个URL给供应商,一旦你的token被授权供应商将被调用。

在Android中一旦验证完毕。你能注冊一个特别的URL框架到你的应用程序中。因此浏览器将触发一个你的app的activity。

比如。假设你想要MyActivity被调用放到你的app的manifest中:

<activity
android:name="MyActivity">

<intent-filter>

<action
android:name="android.intent.action.VIEW"></action>

<category
android:name="android.intent.category.DEFAULT"></category>

<category
android:name="android.intent.category.BROWSABLE"></category>

<data
android:scheme="my-activity"></data>

</intent-filter>

</activity>

而且传递"my-activity://mywebsite.com/"最为一个回调URL。这也对你的应用程序的身份有影响作为mywebsite.com对供应商。

你的应用程序将通过回调获得一个验证码作为给URL的查询參数,在这个URL中,查询key时"verifier"。

你以后将须要这个。

public
String getRequestToken()

throws
OAuthMessageSignerException, OAuthNotAuthorizedException,

OAuthExpectationFailedException,
OAuthCommunicationException {

String authUrl = mProvider.retrieveRequestToken(mConsumer,

mCallbackUrl);

return authUrl;

}

In your OnResume() method in MyActivity you can catch the callback and retrieve the verifier, and upgrade your token with it:

String[] token = getVerifier();

if (token != null)

String accessToken[] = getAccessToken(token[1]);

...

private String[] getVerifier() {

// extract the token if it exists

Uri uri = this.getIntent().getData();

if (uri == null) {

return null;

}

String token = uri.getQueryParameter("oauth_token");

String verifier = uri.getQueryParameter("oauth_verifier");

return new String[] { token, verifier };

}

In our helper class:

public String[] getAccessToken(String verifier)

throws OAuthMessageSignerException, OAuthNotAuthorizedException,

OAuthExpectationFailedException, OAuthCommunicationException {

mProvider.retrieveAccessToken(mConsumer, verifier);

return new String[] {

mConsumer.getToken(), mConsumer.getTokenSecret()

};

}

And that's it. Just make sure you save the access token and its secret. You can now use signpost to sign your HTTP queries e.g.

OAuthConsumer consumer = new CommonsHttpOAuthConsumer(accessToken[0],

accessToken[1]);

HttpGet request = new HttpGet(url);

// sign the request

consumer.sign(request);

// send the request

HttpClient httpClient = new DefaultHttpClient();

HttpResponse response = httpClient.execute(request);

原文:

OAuth is becoming the de-facto protocol
to allow access to your data and services without sharing user password. Effectively all the big names such as Twitter, Google, Yahoo or LinkedIn have already implemented it. There are quite a few libraries and code samples in all the popular programming languages
out there to implement OAuth in your desktop, mobile or web application as well.

There are guides for
Android too, however most of them are not up to date, accurate or just difficult to comprehend if you are in a hurry. Here we provide a few easy to follow steps with some explanation how it can be done in a straightforward way.

First, a short summary how OAuth works. It is based on cryptography, where

  1. a token and a corresponding secret is acquired by a consumer (a desktop or web application)
    from a provider (a server in the cloud),
  2. this token is authorized by the user as valid and allowed to access their data and then
  3. the token is upgraded, and this can then be used from then on until it is revoked by same user who authorized it.

The token acquired in the first step is called a request token, this is where you usually specify which service you would like to get access to; it is called scope.
The second step is called authorization, after which control can be passed back to the consumer application via a callback. The final token that is received in the
third step is called access token. This can be used for a long period of time, it won't expire (but, as mentioned, the user can revoke it any time). It is basically
a short string, with a corresponding secret string, and once the application acquired it, it can be used to sign HTTP requests, thus authenticating it for the provider. All three steps have a corresponding URL at the provider, to where an HTTP request is sent
to get the token or manipulate it.

If you need further details, there's a good article with API reference at code.google.com,
and another very detailed overview with figures here.

We will use the excellent signpost Java
library to implement OAuth access to Gmail. Just download at
least the signpost-core and signpost-commonshttp4 jars, copy them to the lib/ folder inside your Android project, right click on the project, and under Properties/Java Build Path you can add them to the build path:

][]

We will implement OAuth support via a helper class called OAuthHelper. The two single most important classes provided by signpost are OAuthConsumer andOAuthProvider;
before diving into actual communications, we set these up first:

private OAuthConsumer mConsumer;
private OAuthProvider mProvider;

posted @
2017-08-17 14:41 
zhchoutai 
阅读(...) 
评论(...) 
编辑 
收藏

在Android实现client授权的更多相关文章

  1. Android源代码下载之《Android新闻client源代码》

    介绍 Android新闻client源代码,功能上分为:新闻.关注.读报.微博.里面比較有特色的就是读报功能.真正安装报纸的排版进行读报.给人得感觉就像是在读真实的报纸.事实上即使首页的动态云标签很有 ...

  2. 开源:矿Android新闻client,快、小、支持离线阅读、操作简单、内容丰富,形式多样展示、的信息量、全功能 等待(离开码邮箱)

    分享:矿Android新闻client.快.小.支持离线阅读.操作简单.内容丰富,形式多样展示.的信息量.全功能 等待(离开码邮箱) 历时30天我为了开发这个新闻clientAPP,下面简称觅闻 ht ...

  3. Android L2TP Client Setup

    原文链接:http://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server/3.Andr ...

  4. Android Netty Client

    Android netty client Start a netty client on android Download netty Download url :https://netty.io/d ...

  5. Android新浪微博client(七)——ListView图片异步加载、高速缓存

    原文出自:方杰|p=193" style="color:rgb(202,0,0); text-decoration:none; font-size:14px; font-famil ...

  6. android pbap client 蓝牙

    一.  简介: 此功能具体使用的是bluetoothV2.1之后的Phone Book Access Profile功能,简称PBAP .目前MTK Android中只实现了server端的功能,并没 ...

  7. [转] Android:微信授权登录与微信分享全解析

    https://wohugb.gitbooks.io/wechat/content/qrconnent/refresh_token.html http://blog.csdn.net/xiong_it ...

  8. Android:解决client从server上获取数据乱码的方法

    向server发送HTTP请求.接收到的JSON包为response,用String content = EntityUtils.toString(response.getEntity()," ...

  9. Android开源client之LookAround学习(一)Application &amp; 网络框架

    之前看过开源clientLookAround(下载地址:http://download.csdn.net/detail/hualulove/7306807),链接:http://blog.csdn.n ...

随机推荐

  1. 解决vmware 和hyper-v不能共存的问题

    只需在 Windows 中以管理员身份运行命令提示符 cmd 1.运行 bcdedit /copy {current} /d "Windows 8 (关闭 Hyper-V)"命令, ...

  2. 反序列化xml到treeview

    private void Form1_Load(object sender, EventArgs e) { string xmlPath = System.Environment.CurrentDir ...

  3. Hadoop学习总结(2)——Hadoop入门详解

    1.Hadoop介绍 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了一个系统底层细节透明的分布式架构,通过Hadoop,可以将大量的廉价机器的计算资源组织起来,解决单机 ...

  4. 简单的横向ListView实现(version 4.0)

    这个版本号的博客写起来颇费口舌.有些代码自己语言组织能力有限,感觉描写叙述起来非常费劲,前前后后改了五六遍稿子还是不尽人意 ,只是我还是坚持写出来自己当初的思路,假设看得不明确的地方我在文章最后仍然会 ...

  5. android设置Activity背景色为透明的3种方

    方法一:这种方法比较简单,只有一个步骤,只需要在配置文件中把需要设置为透明的activity的样式设置为 Android:theme="@android:style/Theme.Transl ...

  6. 00090_字节输入流InputStream

    1.字节输入流InputStream (1)通过InputStream可以实现把内存中的数据写出到文件: (2)把内存中的数据写出到文件InputStream此抽象类,是表示字节输入流的所有类的超类. ...

  7. 【CS Round #46 (Div. 1.5) A】Letters Deque

    [链接]h在这里写链接 [题意] 在这里写题意 [题解] string类模拟 [错的次数] 0 [反思] 在这了写反思 [代码] /* */ #include <cstdio> #incl ...

  8. 让你更值钱的方法:培养稀缺(追逐新技术,淬炼已有技能、做到出类拔萃,寻找自己所在的行业痛点,App开发者是市场动态平衡的典型)

    一个开发者,如何才能更值钱? 答案非常简单:掌握稀缺资源. 那么,怎样才能持续不断地掌握稀缺资源,让自己更值钱呢? 请看接下来介绍的 2 种识别稀缺的方法和 2 种培养稀缺的策略. 稀缺资源的秘密 资 ...

  9. LA 3989 - Ladies' Choice 稳定婚姻问题

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  10. (转)使用qemu-img管理虚拟机磁盘镜像(创建虚拟机,虚拟机快照)

    转自:http://blog.csdn.net/bravezhe/article/details/8461386 一台虚拟机的核心就是一个磁盘镜像,这个镜像可以理解成虚拟机的磁盘,里面有虚拟机的操作系 ...