iOS 中的 OAuth 2.0 集成

Posted

技术标签:

【中文标题】iOS 中的 OAuth 2.0 集成【英文标题】:OAuth 2.0 integration in iOS 【发布时间】:2013-08-14 02:48:09 【问题描述】:

我多年来一直在尝试在我的 iPhone 应用程序中集成 OAuth 2.0。

我已经搜索并搜索了库、教程等……但它们都将我带入了死胡同。我遇到的主要问题是他们要么有已弃用的代码,要么他们只是不工作,或者他们有一些文档但真的很难遵循(无论如何对我来说......)。

我能为 Xcode 找到的最好的 OAuth2 库是这个:https://github.com/nxtbgthng/OAuth2Client

但是那个的主要问题是它似乎没有做任何事情......我已经遵循了它附带的所有文档和说明,但是在构建和运行之后,它似乎没有进行身份验证.. ..

所以我想我的主要问题是:有没有人知道任何适用于 Xcode 的优秀且最新的 OAuth 2.0 教程或任何类似的库?

因为我现在真的很挣扎.... :(

感谢您抽出宝贵时间,丹。

更新 2:这是我的代码(为安全起见,删除了 App Id 和密码):

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

oauthClient = [[LROAuth2Client alloc]
               initWithClientID:@"MY_CLIENT_ID"
               secret:@"MY_APP_SECRET"
               redirectURL:[NSURL URLWithString:@"app://instagram-callback/?code="]];
oauthClient.delegate = self;

oauthClient.userURL  = [NSURL URLWithString:@"https://api.instagram.com/oauth/authorize/?client_id=ab6dc96859bf43b3a488199ec72d9964&redirect_uri=app://instagram-callback/?code=&response_type=code"];
oauthClient.tokenURL = [NSURL URLWithString:@"https://api.instagram.com/oauth/access_token/"];


[oauthClient authorizeUsingWebView:myWebView];




- (void)oauthClientDidReceiveAccessToken:(LROAuth2Client *)client;

    LROAuth2AccessToken *token = client.accessToken;
    [NSKeyedArchiver archiveRootObject:token toFile:@"Path/To/MyAccessToken"];


- (void)checkAccessTokenForExpiry:(LROAuth2AccessToken *)accessToken;

    if ([accessToken hasExpired]) 
        [oauthClient refreshAccessToken:accessToken];
    


- (void)oauthClientDidRefreshAccessToken:(LROAuth2Client *)client;

    LROAuth2AccessToken *token = client.accessToken;
    [NSKeyedArchiver archiveRootObject:token toFile:@"Path/To/MyAccessToken"];

【问题讨论】:

哪里出了问题?我认为这是您发布的问题。 github.com/nxtbgthng/OAuth2Client/issues/82 它是否提供模态视图/Safari 以通过 Instagram 进行身份验证?还是直接点击登录却什么也没有发生? 已在您的 github 问题中回答。 @sbarow 谢谢你的帮助。我在我发布问题的 Github 页面上留下了评论。请看一下,因为应用程序因为无法获取令牌而崩溃。 您介意粘贴您正在使用的代码吗?也许使用要点? @sbarow 当然。我已经用代码更新了帖子。感谢您的帮助。 【参考方案1】:

在几乎所有项目中我都使用过AFNetworking,因为它非常强大 - 为什么每次都重新发明***:)

此外,它还有一个OAuth2Manager,它很容易实现并且工作稳定。

【讨论】:

是的!我使用了 AFOAuth1Client,它很容易集成。可能与 OAuth2Manager 相同!【参考方案2】:

在Instagram documentation 中说有两种验证方式。一个显式(用于服务器端身份验证)和一个隐式,用于客户端中的身份验证(无服务器)。

您在应用程序中使用显式,尝试将userURL 更改为https://instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token 并将tokenURL 更改为http://your-redirect-uri#access_token=ACCESS-TOKEN

【讨论】:

【参考方案3】:

您很可能无法在 iPhone 应用程序中使用客户端密码(因为无法保护客户端密码),您需要通过服务移动应用程序或移动网站进行身份验证,然后根据此链接处理重定向 URL我在 Uber api 开发者网站上找到: http://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified

此页面上有一些代码可以做到这一点,我现在正在测试: https://medium.com/swift-programming/learn-nsurlsession-using-swift-ebd80205f87c

本页底部也有一些不错的资料:http://www.idmworks.com/blog/entry/getting-started-with-oauth2client-on-ios

【讨论】:

【参考方案4】:

我最近做了简单的 pod https://github.com/kohtenko/KOSocialOAuth。

您可以轻松连接InstagramVKLinkedIn。随意使用任何其他 OAuth 端点发送拉取请求。

【讨论】:

【参考方案5】:

查看此内容以使用 Instagram API:https://github.com/shyambhat/InstagramKit。在 cmets 中,我发现您在重定向时遇到问题 - 请查看 Xcode 的 Redirect URI 以寻求帮助:What's a redirect URI? how does it apply to iOS app for OAuth2.0?

【讨论】:

以上是关于iOS 中的 OAuth 2.0 集成的主要内容,如果未能解决你的问题,请参考以下文章

企业统一用户中心OAuth 2.0

OAuth 2.0 与 JWT

Springboot Oauth2 集成Swagger2权限验证实战

OAuth 2.0 单元测试解决方案

APICloud平台的融云2.0集成

Apache Oltu Spring Security OAuth2 和 Google 集成