关于Oauth认证的那些事
来源:互联网 发布:文章数据库设计 编辑:程序博客网 时间:2024/05/22 17:11
随着网络的发展, Oauth认证已经被广泛使用. 这篇博客就记录一下Oauth的使用过程.
以新浪微博为例.
使用微博认证需要一个微博开发者的账号~
下面先申请开发者账号,使用微博账号即可。
1.准备操作:
登录http://open.weibo.com, 登录你的微博帐号, 如果点击登录没有反应的话, 就先在http://www.weibo.com中登录一下, 然后就可以了.
填写基本信息, 邮箱一定要写正确的, 因为稍后要验证.
邮箱认证成功之后, 就可以正式开始进入我们的主题了
2.创建应用(以移动应用为例)
点击微连接, 创建移动应用, 点击立即接入, 如果你没有进行身份认证的话, 会有一些提示, 这对我们没有影响, 点击继续创建即可
创建好应用之后, 点击左侧的高级信息, 输入授权回调页面, 两个网址最好不一样, 用来测试是否连接成功.
在测试信息里, 输入另一个微博账号, 进行关联, 也可以不设, 但是还是建议写上为好
3.查看API文档
点击导航栏处的文档, 然后选择API文档
我们需要获取AppKey 和 授权回调地址, 然后和上面URL进行拼接
4.获取参数, 拼接URL
找到刚刚创建的应用, 点击基本信息, 里面有我们需要的App Key 和 App Secret(这个后面会用到)
然后就可以进行拼接了, 记住最好直接复制, 不要手写, 很容易出错. URL后面加 ‘?’ 参数名就是必选参数的参数名, 直接复制就好, 等号两边不要加空格. 参数之间用 ‘&’ 连接
拼接格式: URL?参数名=参数&参数名=参数
把拼接后的网址复制到浏览器中进行测试, 能打开你的授权回调页面代表没有问题. 有的人会直接弹到回调页面, 有的人会弹出一个提示框, 问是否授权, 不要太惊讶~
把拼接好的URL给你的webView, 就可以在app中进行访问了
5.截取code
当我们看到回调页面的时候, 代表我们上一步成功了. 此时URL里面会含有code, 我们需要做的就是把code截取出来
给webView设置一个代理, 实现它的代理方法
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { print(request.URL) return true}
当我们进行网络加载的时候, 都会调用这个方法, 打印URL, 当授权成功的时候, 打印的URL就会看到里面有一个code, 我们要做的就是截取它
要截取code, 首先需要找到code所在的URL, 经过观察不难发现, 含有code的URL, 前面都含有我们的回调网址, 所以我们可以经过判断来筛取我们所需要的URL
if let urlString = request.URL?.absoluteString { if urlString.hasPrefix(AppRedirectURL) { print("这个网址有code") print(urlString) } }
此时打印出来的URL能很明显的看到code. 你可以自己手动截取, 但是swift中提供了一个query属性, 它能直接帮我们获取到等号后面的内容
if let query = request.URL?.query { let startIndex = "code=".endIndex let code = query.substringFromIndex(startIndex) print(code)}
此时code就截取成功了, 完整的代码如下
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { if let urlString = request.URL?.absoluteString { if urlString.hasPrefix(AppRedirectURL) { if let query = request.URL?.query { let startIndex = "code=".endIndex let code = query.substringFromIndex(startIndex) print(code) } } }
6.获取Token
func loadToken(code: String) { let parameter = ["client_id": AppKey, "client_secret": AppSecret, "grant_type": "authorization_code", "code": code, "redirect_uri": AppRedirectURL] LCNHTTPClient.shareInstance.POST("https://api.weibo.com/oauth2/access_token", parameters: parameter, progress: nil, success: { (_, json) -> Void in // 成功的回调 print(json) }) { (_, error) -> Void in // 失败的回调 print(error) }}
第一句是根据API文档拼接的参数, 我的value值大部分都是在外界定义好的
第二句是调用的管理者发送的AFN请求
如果能够成功的回调, 获取到的json就是从网络上获取的数据, 打印出来能看到一些参数.
最后再把json字典转模型, 然后得到的Token, 就可以根据Token去获取信息了
这就完成了Oauth的认证过程
- 关于Oauth认证的那些事
- 关于 oAuth 认证平台的开发
- OAuth认证的过程
- 关于微博服务端API的OAuth认证实现
- 关于微博服务端API的OAuth认证实现
- 关于微博服务端API的OAuth认证实现
- Oauth那些事
- Oauth认证过程的认识
- 关于客户端和 android OAuth认证方法
- OAuth认证
- Oauth认证
- OAuth认证
- Oauth认证
- OAUTH认证
- OAUTH认证
- OAuth认证
- OAuth认证
- OAuth的认证和授权的过程
- JAVA自学之每日一题(一)
- 通过vscode执行python程序
- OWASP TOP 10 (2013)
- 《基督山伯爵》
- [代码实例][gtk+]使用builder创建UI
- 关于Oauth认证的那些事
- Xcode常用快捷键
- C#基础知识(四)——异常捕获与程序调试
- 对 Jenkins+ANT+Jmeter 接口测试的实践
- POJ 2231 Moo Volume , 简单公式推导
- 20160626 Splashtop软件实现将平板电脑作为PC的扩展显示器
- XListView上拉加载下拉刷新
- 【通信技术】通信技术部分习题解析
- Android几种数据存储的方式