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。
您可以轻松连接Instagram
、VK
或LinkedIn
。随意使用任何其他 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 集成的主要内容,如果未能解决你的问题,请参考以下文章