新浪授权认证(不用SDK)
微博开放平台:http://open.weibo.com/
微博开放接口的调用,如发微博、关注等,都是需要获取用户身份认证的。目前微博开放平台用户身份鉴权主要采用的是OAuth2.0。另外,为了方便开发者开发、测试自己的应用,我们还提供了Basic Auth的身份鉴权方式,但Basic Auth仅适用于应用所属的开发者自己调用接口。
1.获取新浪的登录页面(UIWebView)
2.用户输入得到状态码(code)
3.用code换令牌 Token
#import "ViewController.h"
#define kAppKey @""微博注册应用之后得到
#define kAppSecret @""微博注册应用之后得到
#define kRedirect_url @"https://www.baidu.com"
#define kAccessTokenKey @"kAccessTokenKey"
#define kExpiresTime @"kExpiresTime"
#define kUserID @"kUserID"
@interface ViewController ()<UIWebViewDelegate>
@property (strong,nonatomic) UIWebView * webView;
@end
@implementation ViewController
- (IBAction)Login:(UIButton *)sender {
//1.使用oauth2/authorize发起请求
//拼接网址
NSString * urlString = [NSString stringWithFormat:@"https://api.weibo.com/oauth2/authorize?client_id=%@&redirect_uri=%@",kAppKey,kRedirect_url];
NSURL * url = [NSURL URLWithString:urlString];
//创建请求
NSURLRequest * request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
//创建页面
self.webView = [[UIWebView alloc]initWithFrame:self.view.bounds];
_webView.delegate = self;
[self.view addSubview:_webView];
//加载
[_webView loadRequest:request];
}
- (IBAction)Logout:(UIButton *)sender {
NSUserDefaults * userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setObject:nil forKey:kAccessTokenKey];
[userDefault setObject:nil forKey:kExpiresTime];
[userDefault setObject:nil forKey:kUserID];
[userDefault synchronize];
}
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
//return YES 加载 return NO 不加载
//2.获取code状态码
NSRange range = [[request.URL relativeString]rangeOfString:@"code="];
if (range.length != 0 ) {
//解析code
NSString * code = [[request.URL relativeString]substringFromIndex:range.location+range.length];//截取出来
[self.webView removeFromSuperview];//获取到就不需要了
NSLog(@"%@",code);
//3.换取令牌
//发送Post请求
NSURL * url =[NSURL URLWithString:@"https://api.weibo.com/oauth2/access_token"];
NSMutableURLRequest * upRequest = [NSMutableURLRequest requestWithURL:url];//用POST而不是用GET
[upRequest setHTTPMethod:@"POST"];
NSURLSession * session =[NSURLSession sharedSession];
NSString * dataString = [NSString stringWithFormat:@"client_id=%@&client_secret=%@&grant_type=authorization_code&code=%@&redirect_uri=%@&",kAppKey,kAppSecret,code,kRedirect_url];
NSData * updata = [dataString dataUsingEncoding:NSUTF8StringEncoding];
NSURLSessionUploadTask * upLoadTask = [session uploadTaskWithRequest:upRequest fromData:updata completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSDictionary * dataDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];//用字典封装json数据
NSLog(@"%@",dataDic);
//我们要用的---access_token expires_in uid
NSString * accesstoken = [dataDic objectForKey:@"access_token"];
NSString * expiresin = [dataDic objectForKey:@"expires_in"];
NSString * uid = [dataDic objectForKey:@"uid"];
//保存下来
NSUserDefaults * userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setObject:accesstoken forKey:kAccessTokenKey];
[userDefault setObject:expiresin forKey:kExpiresTime];
[userDefault setObject:uid forKey:kUserID];
[userDefault synchronize];
}];
[upLoadTask resume];
return NO;
}else{
return YES;
}
}
新浪授权认证(不用SDK)的更多相关文章
- 新年上新!极光认证 Web SDK 首版上线
新年伊始,极光开发者服务也抢先为各位开发者朋友带来了"新年大礼包",几款明星产品都悉数有不少更新: 极光认证 Web SDK 版本上线 相信不少小伙伴早已熟知极光认证这款产品,3秒 ...
- [iOS微博项目 - 2.1] - 获得新浪授权接口
A.如何获得新浪的授权接口 登陆新浪的开放平台 注册新浪账号 创建应用 获得应用id和请求地址 查阅相关API 关联需要进行测试的账号 1.登陆开放平台 http://open.weibo.com ...
- 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)
---------------------------------------------------------------------------------------------- [版权申明 ...
- 手把手教你用新浪云容器 Java 搭建自己的网站
经过一段时间的开发,更新,迭代,新浪云容器 Java 环境逐渐成熟起来,相比过去的 Java 运行环境,可用性和易用性都得到了大量的提升.同时也收到了不少用户反馈的使用问题,特此在这篇文章里综合介绍一 ...
- Java 模拟新浪登录 2016
想学习一下网络爬虫.涉及到模拟登录,查阅了一番资料以后发现大部分都有点过时了,就使用前辈们给的经验,Firefox抓包调试,採用httpclient模拟了一下新浪登录. 不正确之处多多包括.须要的能够 ...
- [转]新浪云存储SCS Node.js使用指南
转载自:https://github.com/SinaCloudStorage/scs-sdk-js scs-sdk-js 新浪云存储(SCS) SDK for Node.js Installatio ...
- IOS第三天-新浪微博 - 版本新特性,OAuth授权认证
*********版本新特性 #import "HWNewfeatureViewController.h" #import "HWTabBarViewController ...
- iOS实例下载:使用腾讯的SDK将新浪微薄嵌入到应用中
最近在做应用中添加SNS分享功能,只需要分享功能,腾讯的SDK和Demo还是挺直观的,看了下基本上就能用了,而新浪的Oauth认证看了个例子是跳出程序到Web上去认证的,体验很不好.不过Oauth认证 ...
- 【公众号】微信第三方登录(静默授权和非静默授权)(具体代码:U盘 新浪云SAE)
一.微信联合登录是怎么登录的,有几种登录方式:微信联合登录和微信授权登录[授权登录(非静默授权)与静默授权] [主动授权]:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关 ...
随机推荐
- C#界面设计疑问2:panel摆放问题
1.问题1是这样的,网友意思让使用一个按键对应显示一个panel 即,http://zhidao.baidu.com/question/1924974374730559427.html 2.那么我在设 ...
- 初识CLR
眨眼间我已经实习了半年时间并且转正了,身份也正式从一个学生转变为一个职场人,这个博客自从开始实习以来就一直没有更新过= =没错,就是我懒癌晚期,不过不行!一切都要开始走向正轨,此博会继续见证我的成长, ...
- Mysql学习(慕课学习笔记6)修改数据表(上)
添加单列 Alter table tb1_name ADD[column] col_name column_definition [first | after col_name] 列名称 ...
- Python入门学习之input()与raw_input()的区别
登陆博客时才发现已经注册一年了,由于之前一直都没有打算从事软件开发行业,所以博客便被束之高阁,软件开发,对于我来说,是成长,更是磨炼.头脑风暴总是来去自由,记录灵感,与大家一起共享思维进步的成果. P ...
- python安装——Windows平台
刚刚申请博客,第一次写随笔,记录下自己最近的学习情况,希望自己能够不断的学习,不断的丰富自己~ 最近刚开始学python,记录一下,希望大家相互学习,批评指正~ 1.下载python:https:// ...
- silverlight中使用Json读取数据
假定按照 如何:对基于 HTTP 的服务发出请求中描述的方法向基于 HTTP 的 Web 服务发出请求后,在 Stream 类型的 responseStream 对象中返回了下列 JSON. {&qu ...
- js各种进制数之间的转换
计算机中常用的进制数有二进制.八进制.十进制.十六进制 一.十进制 to 其他 var x = 10; // 或定义其他值均可 x.toString(n); // n 代表要转换到的进制,比如n可以为 ...
- 遍历ArrayList与LinkedList,使用FOR与迭代器的区别
网上结论: 如果是链表结构的集合,如LinkedList,则使用迭代器遍历,速度会更快(顺序获取). 如果是数组结构的,如ArrayList,则使用for循环会更快(随机获取) 测试代码: packa ...
- AutoCompleteTextView 与sqlite绑定实现记住用户输入的内容并自动提示
把用户输入的内容保存到数据库表中,然后用户输入时,进行模糊查询并把查询结果附到AutoCompleteTextView中. 1:activity_main.xml <LinearLayout x ...
- GridView 设置背景透明以及Item的点击动画
//将点击时的背景色设置为透明 gridView.setSelector(new ColorDrawable(Color.TRANSPARENT)); 此时点击GridView的每个Item就不会出现 ...