关于OAuth的授权全过程

@interface SZMOAuthViewCtrl ()<UIWebViewDelegate>

@end

@implementation SZMOAuthViewCtrl

- (void)viewDidLoad {
    [super viewDidLoad];
    //1.创建一个webview
    UIWebView *webView = [[UIWebView alloc]init];
    webView.delegate = self;
    webView.frame = self.view.bounds;
    [self.view addSubview:webView];

    //2.用webView加载登录页面(新浪提供的)
    NSURL *url = [NSURL URLWithString:@"https://api.weibo.com/oauth2/authorize?client_id=2363498717&redirect_uri=http://"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];

}
#pragma mark webView代理方法
-(void)webViewDidFinishLoad:(UIWebView *)webView{

    [MBProgressHUD hideHUD];
}
-(void)webViewDidStartLoad:(UIWebView *)webView{
    [MBProgressHUD showMessage:@"正在加载"];
}
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
    [MBProgressHUD hideHUD];
}

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    //1.获得url
    NSString *url = request.URL.absoluteString;

    //2.判断是否为回调地址
    NSRange range = [url rangeOfString:@"code="];
    if (range.length != 0) {
        //是回调地址
        //截取code=后面的参数值
        NSInteger fromIndex = range.length + range.location;
        NSString *code = [url substringFromIndex:fromIndex];
        //利用code换取一个accessToken
        [self accessTokenWithcode:code];
        //禁止加载回调地址
        return NO;
    }
    return YES;
}
//利用code(授权成功后的request Token)换取一个accessToken
- (void)accessTokenWithcode:(NSString *)code{
//    请求参数
//    必选     类型及范围     说明
//    client_id     true     string     申请应用时分配的AppKey。
//    client_secret     true     string     申请应用时分配的AppSecret。
//    grant_type     true     string     请求的类型,填写authorization_code
//
//
//    grant_type为authorization_code时
//
//    必选     类型及范围     说明
//    code     true     string     调用authorize获得的code值。
//    redirect_uri     true     string     回调地址,需需与注册应用里的回调地址一致。
    //1.创建请求管理者
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
//    mgr.responseSerializer = [AFJSONResponseSerializer serializer];
    //2.拼接参数
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"client_id"] = @"2363498717";
    params[@"client_secret"] = @"2a388124d48d6d52f9b166b4d135e942";
    params[@"grant_type"] = @"authorization_code";
    params[@"code"] = code;
    params[@"redirect_uri"] = @"http://";

    [mgr POST:@"https://api.weibo.com/oauth2/access_token" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
        [MBProgressHUD hideHUD];
        //沙盒路径
        NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
        NSString *path = [doc stringByAppendingPathComponent:@"account.plist"];
        //把返回来的数据转换成模型
        SZMAccountModel *accountMdl = [SZMAccountModel accountWithDict:responseObject];
        //自定义对象必须要用NSKeyedArchiver
        [NSKeyedArchiver archiveRootObject:accountMdl toFile:path];
        //将返回的账号数据存进沙盒(下面这个方法只能往数组和字典里写数据)
//        [responseObject writeToFile:path atomically:YES];

        NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
        //当前app的版本号的字符串
        NSString *currentShortVersionStr = [NSBundle mainBundle].infoDictionary[kShortVersionStr];
        //将版本号存储到偏好设置中
        NSString *saveVersionStr = [user objectForKey:kShortVersionStr];
        UIWindow *window = [UIApplication sharedApplication].keyWindow;
        if ([currentShortVersionStr isEqualToString:saveVersionStr]) {

            SZMTabBarController *TabBar = [[SZMTabBarController alloc]init];
            window.rootViewController = TabBar;
        }else{

            window.rootViewController = [SZMNewFeatureCtrl new];
        }
        //将新的版本号存到偏好设置中
        [user setObject:currentShortVersionStr forKey:kShortVersionStr];
        [user synchronize];

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"请求失败%@",error);
        [MBProgressHUD hideHUD];
    }];

}
时间: 2024-08-24 14:24:22

关于OAuth的授权全过程的相关文章

在WebApi中基于Owin OAuth使用授权发放Token

如何基于Microsoft.Owin.Security.OAuth,使用Client CredentialsGrant授权方式给客户端发放access token? Client CredentialsGrant的授权方式就是只验证客户端(Client),不验证用户(Resource Owner),只要客户端通过验证就发accesstoken.举一个对应的应用场景例子,比如我们想提供一个“获取网站首页最新博文列表”的WebAPI给客户端App调用.由于这个数据与用户无关,所以不涉及用户登录与授权

微信oauth网页授权获取用户基本信息

参考链接(请在微信客户端中打开此链接体验) Scope为snsapi_base https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=http%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2

啊Ran讲微信开发(.net) :公众号(服务号)+自定义服务器(OAuth授权登录)

上一篇我们探讨到自定义菜单key为view带有一个"url"参数的点击事件,这边我们就聊聊"微信授权登录". 1.网页授权接口 网页授权接口允许微信公众号的第三方网页获取微信个人用户的基本信息,包括昵称,头像,性别,城市,国家,注册时间等.利用微信个人用户的基本信息,可以实现体验优化,用户来源统计,账号绑定,用户身份鉴权等功能. OAuth协议为用户资源的授权提供了一个安全的,开放而简易的标准,与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的账户信

什么是OAuth授权?

什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密码提供给该第三方网站. OAuth允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定的时间内访问特定的资源. 二.OAuth的原理和授权流程 OAuth的认证和授权的过程中涉及的三方包括: 服务商:用户使用服务的提供方,一般用来存消息.储照片.视频.联系人.文件等(

OAuth授权过程

什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准,所谓OAuth(即Open Authorization,开放授权),它是为用户资源授权提供了一种安全简单的标准, 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密码提供给该第三方网站而是直接从服务商提供的页面直接登录. OAuth允许用户提供一个访问标记(专业点叫做令牌)给第三方网站,一个访问标记(专业点叫做令牌)对应一个特定的第三方网站,同时该访问标

经验之谈—OAuth授权流程图

事实上我们在开发中,常常须要解决获得用户的一些特定的数据,比方:能够选择使用微博登陆.使用QQ登陆等等.然后我们间接的获得用户的头像.昵称等信息.这些都涉及到OAuth授权的内容 OAuth授权有这么几个特点: OAuth 协议为用户资源的授权提供了一个安全的.开放而又简易的标准 OAuth 的授权不会使第三方触及到用户的帐号信息 OAuth 同意用户提供一个令牌.而不是username和password来訪问他们存放在特定服务提供者的数据 每个令牌授权一个 特定的站点 在 特定的时段内 訪问

[iOS微博项目 - 2.0] - OAuth授权3步

A.概念 OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的.oAuth是Open Authorization的简写. B.使用3步骤 OAUTH认证授权就三个步骤,三句话可以概括: 1. 获取未授权的Request Token 2. 获取用户授权的Request Token 3. 用授权的Requ

iOS开发 - 第05篇 - 项目 - 03 - 版本新特性 &amp; OAuth授权

1.版本新特性 1.1 界面 程序第一次启动的时候会弹出新特性界面,之后启动不会出现. 1.2 实现思路 1> 新建一个HWNewfeatureViewController(继承自UIViewController) 2> 先将其设置为整个程序的根控制器,用于演示 3> 使用UIScrollView 4>添加UIPageControl 5> 设置UIScrollView代理,监听滚动,设置UIPageControl 2.控制器切换 2.1 一个View中显示其他控制器的View

OAuth 2.0 认证授权

其实之前自己做的微信服务号的绑定登录也就是个OAuth认证授权 简单看下第三方使用OAuth做认证授权的过程:(取自网络,带图的大家应该都喜欢~) 第一步:用户登录第三方网站,例如使用qq登录. 第二步:点击登录后,会跳到qq平台提示输入用户名和密码. 第三步:如果用户名和密码正确,会提示是否接受授权,如果授权成功,第三方网站就能访问你的资源了,qq头像.用户名等 认证和授权过程(包括三方) 1.服务提供方,用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表. 2.用户,存放在服务提