微博开放平台: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)的更多相关文章

  1. 新年上新!极光认证 Web SDK 首版上线

    新年伊始,极光开发者服务也抢先为各位开发者朋友带来了"新年大礼包",几款明星产品都悉数有不少更新: 极光认证 Web SDK 版本上线 相信不少小伙伴早已熟知极光认证这款产品,3秒 ...

  2. [iOS微博项目 - 2.1] - 获得新浪授权接口

    A.如何获得新浪的授权接口 登陆新浪的开放平台 注册新浪账号 创建应用 获得应用id和请求地址 查阅相关API 关联需要进行测试的账号   1.登陆开放平台 http://open.weibo.com ...

  3. 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)

    ---------------------------------------------------------------------------------------------- [版权申明 ...

  4. 手把手教你用新浪云容器 Java 搭建自己的网站

    经过一段时间的开发,更新,迭代,新浪云容器 Java 环境逐渐成熟起来,相比过去的 Java 运行环境,可用性和易用性都得到了大量的提升.同时也收到了不少用户反馈的使用问题,特此在这篇文章里综合介绍一 ...

  5. Java 模拟新浪登录 2016

    想学习一下网络爬虫.涉及到模拟登录,查阅了一番资料以后发现大部分都有点过时了,就使用前辈们给的经验,Firefox抓包调试,採用httpclient模拟了一下新浪登录. 不正确之处多多包括.须要的能够 ...

  6. [转]新浪云存储SCS Node.js使用指南

    转载自:https://github.com/SinaCloudStorage/scs-sdk-js scs-sdk-js 新浪云存储(SCS) SDK for Node.js Installatio ...

  7. IOS第三天-新浪微博 - 版本新特性,OAuth授权认证

    *********版本新特性 #import "HWNewfeatureViewController.h" #import "HWTabBarViewController ...

  8. iOS实例下载:使用腾讯的SDK将新浪微薄嵌入到应用中

    最近在做应用中添加SNS分享功能,只需要分享功能,腾讯的SDK和Demo还是挺直观的,看了下基本上就能用了,而新浪的Oauth认证看了个例子是跳出程序到Web上去认证的,体验很不好.不过Oauth认证 ...

  9. 【公众号】微信第三方登录(静默授权和非静默授权)(具体代码:U盘 新浪云SAE)

    一.微信联合登录是怎么登录的,有几种登录方式:微信联合登录和微信授权登录[授权登录(非静默授权)与静默授权] [主动授权]:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关 ...

随机推荐

  1. 如何在Silverlight应用程序中获取ASP.NET页面参数

    asp.net Silverlight应用程序中获取载体aspx页面参数 有时候SL应用中需要使用由aspx页面中传递过来的参数值,此时通常有两种方法获取 1. 使用InitParameters属性, ...

  2. C#中的表达式树的浅解

    表达式树可以说是Linq的核心之一,为什么是Linq的核心之一呢?因为表达式树使得c#不再是仅仅能编译成IL,我们可以通过c#生成一个表达式树,将结果作为一个中间格式,在将其转换成目标平台上的本机语言 ...

  3. JS常用验证方法

    1.验证必须为数字(可有小数点) if(isNaN(value))execCommand('undo') 说明:1.isNaN()方法用于验证value值是否为非法数字,返回值true或者false. ...

  4. ps 换图片的背景颜色

    先把图像格式换乘RGB然后调整颜色,不用谢我是活雷锋!www.idouly.com

  5. 基于webrtc的多人视频会话的demo运行程序

    服务端程序: 该服务程序为windows平台下的程序,使用libevent书写,并集成了UDP的中转程序.(该服务器程序不能和客户端程序运行在同一台PC机电脑,不然服务器程序和客户端程序会抢占同一UD ...

  6. uva11292贪心基础题目

    C - 贪心 基础 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:65536KB     64bi ...

  7. Mysql存储过程分析

    为了搞明白为什么mysql的存储过程是高效的,我们需要理解mysql的执行流程是什么,当输入sql语句之后,mysql会先进行sql语句语法正确性检查,然后再进行编译,然后才执行,最后把结果返回.如下 ...

  8. Java系列--目录

    因工作项目的需要,从C#转Java也有很长一段时间了,决定记载归纳一下这半年到底学了什么,到了一个什么程度,当然其间可能会有一些关于.NET的对比. 这是这个系列的目录,我准备按照我的归纳学习点来写, ...

  9. Bootstrap定制(一)less入门及编译

    第一篇博,希望支持. 近期在开发一个项目,项目前端定位于bootstrap,遂花了少许时间研究了bootstrap,将其整理整理,与众人共享. bootstrap官方的定制,功能还算完善,但是基于we ...

  10. CSS3 基础知识

    CSS3 基础知识1.边框    1.1 圆角  border-radius:5px 0 0 5px;    1.2 阴影  box-shadow:2px 3px 4px 5px rgba(0,0,0 ...