【问题标题】:Authenticate iOS App with Internal Application Credentials NOT User Credentials使用内部应用程序凭据而不是用户凭据对 iOS 应用程序进行身份验证
【发布时间】:2012-08-02 21:47:44
【问题描述】:

我是否可以在没有用户交互的情况下对 iOS 应用程序进行身份验证,使其达到可以向 Facebook 请求页面数据的级别?

例如,在音乐家的应用中,我希望能够向 Facebook 请求音乐家的艺术家页面,包括墙上的帖子。然后,我可以获取他们页面的原始数据并随意设置样式。这不需要用户登录,并且会话身份验证将由应用程序本身使用嵌入式凭据异步完成。

我想使用 SDK,但我认为这需要手动 OAuth 访问令牌请求和帖子。

感谢您的帮助!


更新:

为了澄清,我很好奇以下可能性:

1) 应用程序使用嵌入应用程序的凭据加载并请求 OAuth 访问令牌 2) 然后应用程序可以向 facebook 请求来自预定页面提要的提要数据 3)这些都不需要任何用户交互或将应用程序反弹到移动 safari 等。

【问题讨论】:

  • 我认为您正在与艺术家合作开发一个应用程序,该应用程序具有更好的 FB 页面前端?或者您是否正在尝试解决其他问题?您希望此凭证拥有哪些权利?应用是在发布(作为谁?贴在什么墙上?),还是只是在阅读?
  • 是的——这将是一种给他们的 Facebook 墙贴皮的方法。老实说,只需要在没有 UIWebView 的情况下显示墙就可以了。证书将来自艺术家的标签。该应用程序永远不会自行发布,只会请求页面的提要。如果使用该应用程序的用户想要进行身份验证,他们可以发表评论等,但让我们看看我是否可以先重新输入提要! ;)

标签: ios facebook authentication


【解决方案1】:

我不太明白你想要什么,但可以在没有用户交互的情况下进行身份验证:

如果请求需要身份验证才能使 连接,有效的凭据必须已经在 NSURLCredentialStorage,或者必须作为请求的一部分提供 网址。如果凭据不可用或无法进行身份验证,则 URL 加载系统通过发送 NSURLProtocol 子类来响应 处理连接 continueWithoutCredentialForAuthenticationChallenge:消息。

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/AuthenticationChallenges.html#//apple_ref/doc/uid/TP40009507-SW1

有一种认证方式:

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
   return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
     if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
         [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
     [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}

【讨论】:

  • 酷 - 以前从未见过 NSURLCredentialStorage。这将如何应用于 Facebook?我必须在 NSURLCredentialStorage 中手动存储凭据,对吗?这是艺术家的用户名和密码,还是某种特定于 Facebook 的应用程序凭据?
【解决方案2】:

好的 - 我想通了。感觉很傻,我不知道你能做到这一点。

您可以为应用 ID 和密码请求访问令牌。这将允许您发出需要访问令牌的公共数据请求。

请求访问令牌: https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=11111111&client_secret=9999999999

然后,只需在您的 Feed 请求中使用返回的访问令牌:

https://graph.facebook.com/musicpage/feed?access_token=ACCESS_TOKEN

如果这违反 TOS 或已弃用 - 请告诉我。目前看来,这似乎是解决方案!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 2020-12-11
    • 2020-04-09
    • 1970-01-01
    • 2018-11-12
    • 2013-01-30
    相关资源
    最近更新 更多