iOS中OAuth授权获取Access_Tolen

iOS中OAuth授权获取Access_Tolen

在所有快速登录中差不多采用同样的授权方式获取access_Token(Oauth2.0授权获取Access_Token),今天以新浪微博获取Access_Token:
  • 1 成为为微博开发者

  • 首先登录微博开放平台http://open.weibo.com

  • 先注册成为开发者,验证邮箱之后.

  • 2 创建应用

  • 点击微链接-移动应用-立即接入-继续创建.

  • 创建应用名称(最好和你工程名称相同).

  • 创建完成之后基本应用信息系统自动为该应用生成的APPKeyAPPSecret.

  • 并在应用信息的高级信息,设置授权回调页地址Redirect_URI.(随便填写,可以写百度"https://www.baidu.com")

  • 由于这里是手机客户端,而不是web应用,因此创建应用的时候,Redirect_URI可以随便写,但必须全局都使用同一个地址Redirect_URI.

  • 取消授权回调页也是随便填写.

  • 3 显示登录页面,请求用户授权:

  • 点击文档-微博登陆-授权机制-接口;

  • 1.页面地址:https://api.weibo.com/oauth2/authorize

  • 2.必传参数

    • client_id 申请应用时分配的AppKey
    • redirect_uri 授权回调地址
  • 3.完整的请求路径:https://api.weibo.com/oauth2/authorize?client_id=4067793982&redirect_uri=http://www.baidu.com

  • 4.用户输入账号密码,授权成功后

  • 1.会自动定位到回调地址

  • 2.新浪会在回调地址的后面拼接一个code参数 (将来要利用code参数向新浪服务器换取一个access_token)
    这个code可以在webView的代理方法中拿到.

  • 5.利用code参数向新浪服务器换取一个access_token

具体实现代码如下:
// "access_token" = "2.00vWf4GE3CDS8E082f1f060fSdU2jD"
// 一个accessToken对应着 1个用户 + 1个应用

#import "HWOAuthViewController.h"
#import "AFNetworking.h"
#import "HWTabBarController.h"

@interface HWOAuthViewController () <UIWebViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end

@implementation HWOAuthViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    NSURL *url = [NSURL URLWithString:@"https://api.weibo.com/oauth2/authorize?client_id=1281603749&redirect_uri=https://www.baidu.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:request];
}

#pragma mark - <UIWebViewDelegate>
/**
 *  每当webView想发送请求之前都会调用(能在这个方法中拦截webView的所有请求)
 *
 *  @param request        webView想发送的请求
 *
 *  @return YES : 允许加载这个请求, NO : 禁止加载这个请求
 */
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    // 1.URL字符串
    NSString *url = request.URL.absoluteString;

    // 2.查找URL中是否有"code="
    NSRange range = [url rangeOfString:@"code="];
    if (range.length) { // 已经找到code=
        // 3.截取code
        NSString *code = [url substringFromIndex:range.location + range.length];
        // 4.利用code换取access_token
        [self accessTokenWithCode:code];
        return NO;
    }
    return YES;
}

/**
 *  利用code换取access_token
 */
- (void)accessTokenWithCode:(NSString *)code
{
    // URL : https://api.weibo.com/oauth2/access_token
    // 请求方式 : POST
    /*请求参数
     client_id  申请应用时分配的AppKey。
     client_secret  申请应用时分配的AppSecret。
     grant_type 请求的类型,填写authorization_code
     code   调用authorize获得的code值。
     redirect_uri 回调地址,需需与注册应用里的回调地址一致。
    */
    /*返回结果
     {
     "access_token": "ACCESS_TOKEN",
     "expires_in": 1234,
     "remind_in":"798114",
     "uid":"12341234"
     }
     */

    // 1.创建一个请求管理者
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

    // 2.拼接请求参数
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"client_id"] = @"1281603749";
    params[@"client_secret"] = @"443af14f07509433acef44d9fc158e53";
    params[@"grant_type"] = @"authorization_code";
    params[@"code"] = code;
    params[@"redirect_uri"] = @"https://www.baidu.com";

    // 3.发送一个POST请求
    [mgr POST:@"https://api.weibo.com/oauth2/access_token" parameters:params
      success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
          // 沙盒路径
          NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
          NSString *path = [doc stringByAppendingPathComponent:@"account.plist"];

          // 将服务器返回的字典(JSON)数据存储起来
          [responseObject writeToFile:path atomically:YES];
          // 切换到主控制器(获取到之后要跳转页面)
          [UIApplication sharedApplication].keyWindow.rootViewController = [[HWTabBarController alloc] init];
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
          HWLog(@"请求失败 - %@", error);
    }];
}
@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容