Android开发:OAuth2服务认证 OAuth2协议

  次阅读 作者:智能小宝 来源:互联网 2016-01-19 12:03 我要评论(0)

OAuth2协议是一种向第三方服务进行身份验证的工业标准方法.OAuth2提供一个单值,叫做** 认证令牌(auth token)** ,代表用户身份和程序身份验证授权。这节课将要演示连接到一个支持OAuth2的Google服务器上。尽管Google服务只是用作示例,但是演示的这 项技术将会在任何正确支持OAuth2协议的服务上工作。

为了安全地访问在线服务,用户需要在服务上进行身份验证,即要提供他们的身份的证明。对于一个要访问第三方服务的程序来说,安全问题甚至更复杂。不 仅仅是用户需要在访问服务前要进行身份验证,而且程序也要进行身份验证来授权用户。

OAuth2协议是一种向第三方服务进行身份验证的工业标准方法.OAuth2提供一个单值,叫做** 认证令牌(auth token)** ,代表用户身份和程序身份验证授权。这节课将要演示连接到一个支持OAuth2的Google服务器上。尽管Google服务只是用作示例,但是演示的这 项技术将会在任何正确支持OAuth2协议的服务上工作。

使用OAuth2有利于:

从用户手中得到授权访问那些需要他/她的账户的在线服务。

代替用户在一个在线服务上验证身份。

处理验证错误

收集信息

要开始使用Oauth2,你需要知道一些关于你要访问的API的信息:

你要访问的服务的地址。

认证范围(auth scope)。它是一个定义了你的应用需要的特定访问类型的字符串。例如,Google Tasks的只读访问认证范围范围是'''查看你的任务(View your tasks)''',而可读写访问的认证范围是'_管理你的任务(Manage Your Tasks)* 。

一个**客户端ID(client id)和客户端密钥(client secret)** 。他们是在服务中为了识别你的应用的字符串。你需要从服务提供者手中获取这些字符串。Google 有一个自服务系统用来获取客户端ID和密钥。Getting Started with the Tasks API and OAuth 2.0 on Android 这篇文章解释了如何使用这套系统来获取这些用于Google Tasks API的值对。

请求一个验证令牌

现在你已经准备好获取一个身份验证令牌了。获取步骤如下图所示。

为了得到一个验证令牌,首先需要在你的manifest文件中请求* ACCOUNT_MANAGER_'。 要用这个令牌来真正做些事情,你也必须添加'_INTERNET* 权限。

<manifest ... >

<uses-permission android:name="android.permission.ACCOUNT_MANAGER" />

<uses-permission android:name="android.permission.INTERNET" />

...

</manifest>

一旦你的应用有了这些权限,你就可以调用AccountManager.getAuthToken() 方法来获取令牌。

注意了!在AccountManager_' 中调用方法可能有些诡异!由于账户操作会涉及到网络通讯,因此大部分的AccountManager 的方法是异步的。这意味着相对于在一个方法中获取所有的令牌的工作,你需要把他们分散到一系列的回调函数中实现。例如:

AccountManager am new Bundle();

am.getAuthToken(

myAccount_,// 用getAccountsByType()来检索的账户

"Manage your tasks",// 令牌范围

options,// 特殊验证选项

this,// 你的activity

new OnTokenAcquired(),// 成功获取令牌后调用的回调函数

new Handler(new OnError()));// 错误发生时调用的回调函数

在这个例子中,OnTokenAcquired是一个继承了**AccountManagerCallback** 的类。**AccountManager** 在**OnTokenAcquired**中调用**run()** 方法,该方法需要传递一个含有一个**Bundle** 的**AccountManagerFuture** 的实例。如果调用成功,那么这个令牌中就包含了这个Bundle。

这里展现如何从** Bundle** 中获取令牌的方法:

private class OnTokenAcquired implements AccountManagerCallback<Bundle> {

@Override

public void run(AccountManagerFuture<Bundle> result) {

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...