小编TMC*_*TMC的帖子

在iOS应用程序中设计Facebook身份验证,该应用程序也可访问安全的Web服务

目标: 允许用户使用Facebook进行身份验证,进入需要访问我正在运行的受保护Web服务的iOS应用程序.

假设: 对于那些选择不使用Facebook登录的用户,有一个原生身份验证(和注册)系统.

细节:

  • 假设我们希望为用户提供登录Facebook的选项,而无需为我们的系统创建单独的帐户/凭证.
  • 因为我们支持我们自己的本机身份验证机制(用户名和密码),所以我们拥有自己的用户ID,并在初始凭据验证后发出用于后续交互的身份验证令牌.

我很惊讶Facebook在他们的开发者文档中没有这方面的最佳实践.所有现有文档要么假设您正在构建一个网站的FB auth,要么是一个没有需要身份验证的服务的独立移动应用程序.

这是我对如何设计这个问题的初步想法,但是想要验证它是否正确.

  1. 客户端弹出Facebook iOS登录
  2. UI用户使用Facebook凭据登录并获取访问令牌
  3. iOS App将访问令牌传递给我们的服务器
  4. 我们的服务器使用访问令牌与FB图形API进行通信,以(a)验证令牌和(b)获取该访问令牌的FB用户ID.

    例如,我们的服务器将调用https://graph.facebook.com/me/?access_token=XYZ,它将返回JSON对象中的配置文件信息

  5. 假设它有效,我们的服务器从JSON对象中提取用户ID并检查用户是否已经拥有一个帐户.如果是这样,我们会向客户端发出我们自己的身份验证票据以用于该会话.如果用户没有帐户,我们使用Facebook用户ID创建一个新帐户,分配我们自己的唯一用户ID并发出我们的身份验证票.

  6. 然后,客户端在后续需要身份验证的交互上传回auth票证.

这对我来说似乎是正确的方法,但不确定我是否遗漏了一些疯狂的基本内容并走错了(复杂的)路径.

facebook facebook-graph-api ios4 ios

397
推荐指数
3
解决办法
5万
查看次数

关于从iPhone应用程序和S3上传照片的架构和设计问题

我想允许iPhone应用程序的用户上传照片并使用Amazon S3.我有两种方法可以解决这个问题:

  1. 从iPhone上传到我的服务器,然后将其代理到Amazon S3.
  2. 从iPhone直接上传到S3

对于选项1,安全性很简单.我永远不必告诉iPhone我的S3秘密.缺点是所有内容都通过我们的服务器代理上传,这有点挫败了进入S3的目的.

对于选项2,理论上它更好,但问题是如何在不给我秘密的情况下将iPhone(或不同平台上的任何移动应用程序)写入我的S3存储桶?另外,我不确定这是否是一个好的设计,因为流程将是:iphone上传到S3,获取URL,然后告诉服务器URL是什么,以便它可以将它添加到我们的数据库以引用未来.但是,由于通信被分成两条腿(iphone-> S3 vs iPhone-> My-Server),因此它将其作为非原子操作而变得脆弱.

我发现了一些使用POST引用基于浏览器的上传的旧信息,但不确定这是否仍然是推荐的方法.我希望有一个更好的解决方案,我们可以使用REST API而不是依赖POST.我也看到了AWS iOS Beta SDK,但是他们的文档并没有多大帮助,我发现亚马逊的一篇文章同样无益,因为它会告诫你什么不该做,但没有告诉你另一种方法:

移动AWS开发工具包签署发送到Amazon Web Services(AWS)的API请求,以验证发出请求的AWS账户的身份.否则,恶意开发人员可以轻松地向其他开发人员的基础架构发出请求.请求使用AWS提供的AWS Access Key ID和Secret Access Key进行签名.秘密访问密钥类似于密码,保密是非常重要的.

提示:您可以在AWS网站http://aws.amazon.com/security-credentials上查看所有AWS安全凭证,包括访问密钥ID和秘密访问密钥 .

在源代码中嵌入凭证对于包括移动应用程序在内的软件来说是有问题的,因为恶意用户可以对软件进行解编译或查看源代码以检索秘密访问密钥.

有没有人对最佳建筑设计和流程有任何建议?

更新:我越深入研究,似乎有很多人建议使用HTTP POST方法和json策略文件,如下所述:http://docs.amazonwebservices.com/AmazonS3/2006-03-01/dev /index.html?UsingHTTPPOST.html.

有了这个,流程就像(1)iPhone向我的服务器发出请求,请求策略文件(2)服务器生成json策略文件并返回给客户端(3)iPhone将照片+ json策略的HTTP POST发送到S3 .我讨厌我以明显的kludgy方式使用HTTP POST,但它看起来更好,因为它根本不需要我的服务器来存储照片.

iphone mobile amazon-s3 ios4 ios

48
推荐指数
3
解决办法
8299
查看次数

无法执行SVN转储 - 错误E720002和格式错误

我是SVN的新手,请原谅可能直截了当的问题.我正在尝试对我的一个项目进行Subversion转储:

svnadmin dump C:\code\project1 -r 9 > repo.dmp
Run Code Online (Sandbox Code Playgroud)

不幸的是我收到了这个错误:

svnadmin: E720002: Can't open file 'project1\format': The system cannot 
find the file specified.
Run Code Online (Sandbox Code Playgroud)

它似乎正在寻找format实际位于的文件project1\.svn\format.这让我感到困惑,因为我希望它在.svnproject1 的子目录中查找,而是查找根目录.

然后我尝试了:

svnadmin dump project1\.svn -r 9 > repo.dmp
Run Code Online (Sandbox Code Playgroud)

但这导致:

svnadmin: E165005: Expected repository format '3' or '5'; found format '12'
Run Code Online (Sandbox Code Playgroud)

我认为这是一个问题,我的格式没有数据,因为这是我读过的常见问题.我的服务器是repositoryhosting.com,它们在1.7.1服务器上.在我的客户端,我正在使用带有SVN的TortoiseSVN:

TortoiseSVN 1.7.4,Build 22459 - 64位Subversion 1.7.2

进一步阅读,我可能会混淆事情,需要反对实际的存储库而不是我的本地工作副本.问题是存储库位于由repositoryhosting.com托管的云中,svnadmin不接受URL作为repo位置,只接受本地路径.

会对正在发生的事情有所帮助...

svn tortoisesvn

30
推荐指数
1
解决办法
2万
查看次数

使用Python 3和示例解析HTML的最佳库?

我是Python的新手,在Windows上使用Python 3.1(pywin).我需要解析一些HTML,基本上是特定HTML标签之间的额外值,并且在我的选项数组中感到困惑,我找到的所有内容都适用于Python 2.x. 我读过关于Beautiful Soup,HTML5Lib和lxml的好评,但我无法弄清楚如何在Windows上安装任何这些.

问题:

  1. 你推荐什么HTML解析器?
  2. 我该如何安装?(要温柔,我是Python新手,记得我在Windows上)
  3. 您是否有一个简单的示例,说明如何使用推荐的库从特定URL中获取HTML并返回值,如下所示:

    <div class ="foo"> <table> <tr> <td> foo </ td> </ tr> </ table> <a class="link" href='/blahblah'>链接</a> </DIV>

(说我们想要回归"/ blahblah")

python-3.x

22
推荐指数
5
解决办法
4万
查看次数

UIWebView中的Facebook身份验证不会重定向回我站点上的原始页面,要求进行身份验证

在我们的iOS应用程序中,我们有一个UIWebView,在我们的域上显示具有Facebook评论模块的Web内容.评论模块要求用户使用Facebook登录.当用户点击登录按钮时,他们将通过登录流程,但永远不会重定向回我们的页面.他们最终在FB拥有的页面上告诉用户"你现在已登录".

Repro步骤:

  1. 在iOS应用程序中创建UIWebView,并在您拥有的某个域上托管的页面上托管Facebook评论模块(例如http://foo.com/test.htm).
  2. 单击注释模块上的"登录"按钮,注意您将重定向到FB登录.
  3. 使用有效的FB凭据登录并观察会发生什么.

登录后(步骤3)我希望在成功验证后,您将被重定向回原始页面(例如http://foo.com/test.htm),以便继续进行交互.但是,这种情况并没有发生.

相反,你在FB拥有的页面上只是说"你现在已经登录"并且你被困在那里.没有重定向发生.

这确实是一个错误,还是我应该做些什么来确保重定向发生?

mobile facebook ios facebook-social-plugins facebook-login

21
推荐指数
3
解决办法
2万
查看次数

HTML5验证器在Facebook OpenGraph XML命名空间xmlns:og上失败

HTML 5验证器在我的代码上失败,尽管我遵循了Facebook的文档.有各种各样的问题,但让我们先从一个例子开始.

我正在关注Facebook"入门"文档并使用th5is代码:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:og="http://ogp.me/ns#"
  xmlns:fb="http://www.facebook.com/2008/fbml">
Run Code Online (Sandbox Code Playgroud)

唯一的区别是我在<!DOCTYPE html>HTML5 之前.通过W3C HTML5验证器运行时,我收到此错误:

 Attribute xmlns:og not allowed here
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一错误是:

  1. Facebook的文档是错误的
  2. 我应该在<!DOCTYPE html>声明中添加某种命名空间.

但是,在任何一种情况下我都不知道修复是什么.会爱一些帮助!

html5 facebook opengraph facebook-opengraph

21
推荐指数
1
解决办法
2万
查看次数

Twitter Bootstrap 2:如何获得响应式设计,将侧边栏放在底部而不是顶部?

Twitter的Bootstrap 2最终添加了原生响应式设计.但是,默认情况下,当浏览器宽度低于最小宽度时,它会将侧边栏放在顶部.我可以看到这对于许多网站是如何工作的,但我实际上想要在小宽度布局的底部侧边栏.

我是Twitter Bootstrap的新手,并试图弄清楚CSS的哪个部分bootstrap-response.css,但我没有在部分中看到任何内容@media (max-width: 480px).

我查看了响应式设计的Bootstrap文档,但没有太多细节.

会喜欢一些指针......

twitter-bootstrap

15
推荐指数
2
解决办法
1万
查看次数

当您在iOS应用程序和服务器中同时使用令牌时,如何处理Facebook对offline_access的弃用

Facebook 对该许可的弃用offline_access即将于2012年5月发布,而且该文档并未向我们提供有关如何处理它的足够信息.

我们有一个iOS应用程序和相应的服务,为它提供支持并与Facebook集成,以便在应用程序内利用用户的朋友列表(因此,如果您的FB朋友也使用该应用程序,您可以更轻松地连接).这就像所有社交应用程序似乎都有效,所以这里没什么特别的.

客户

我们的应用程序使用Facebook iOS SDK允许用户登录,我们目前要求offline_access.令牌会保留在我们的iOS应用程序中,但也会发送到保存它的服务器.客户端代表用户发布更新到用户的新闻源(我们也要求获得publish_stream许可).

服务器

我们的服务器会定期检查用户的FB朋友是否正在使用我们的应用程序.下次用户登录时,我们会以某种方式公开内容和关系,以宣传该用户的朋友.服务器还代表用户定期连接到图形API并获取用户的当前好友列表.这样我们就可以解释用户关系的变化,并将它们反映在我们的应用中.当用户当前没有使用该应用时,我们会这样做,以便他们在下次使用时获得最佳体验.为了实现这一点,我们的iOS应用程序将访问令牌发送到它使用的服务器以及我们要求的原因offline_access.

注意:如果用户明确地退出我们的应用程序,我们将从客户端和服务器中删除访问令牌.

问题

现在我们不再使用永久访问令牌,我正在尝试找出仍然启用我们的场景的最佳实践,同时利用Facebook新的处理和扩展访问令牌的新方法.遗憾的是,该文档并不完全有用.

问题

答:当您通过最新的Facebook iOS SDK进行身份验证时,您获得的访问令牌的默认生命周期是多少?该文档说扩展令牌请求将为您提供持续60天的令牌请求.这个其他文档讨论了第一个访问令牌请求,并提到了不同的有效性,但它不清楚,它是否谈论具体的有效时间:

(重点是我的)

当您从Facebook获取访问令牌时,它将立即生效并可用于在Facebook定义的某段时间内对API的请求.在该时间段过去之后,访问令牌被视为已过期,并且需要再次对用户进行身份验证,以便您的应用获取新的访问令牌.给定访问令牌有效的持续时间取决于它的生成方式.

还有一些事件可能导致访问令牌在其预期到期时间之前变为无效.此类事件包括用户更改其密码,应用程序刷新它的App Secret.处理变化的访问令牌到期时间,以及处理访问令牌在其预期到期时间之前变为无效的情况对于构建强大的社交体验是必不可少的.

B.对于客户来说,现在访问令牌不一定是长期存在的,对我们来说是正确的方法:

让我们使用FB登录,然后在访问令牌过期时进行检测.如果是,那么调用FB iOS SDK重新认证/重新授权?(这应该只是触发用户反弹到FB iOS应用程序,并且在大多数情况下会立即使用新的访问令牌返回到我们的应用程序).

C.根据我发现的这篇博客文章,你只能扩展一次访问令牌:

我可以用60天的访问令牌换取新的60天访问令牌吗?

不,对不起,你不能.您只能为扩展的用户访问令牌交换有效(意义是当前的)用户访问令牌.您无法扩展已扩展的访问令牌.

在客户端,我可以通过提示重新认证/重新授权来解决这个问题,正如我在问题B中提到的那样.但是,这在我们的服务器上不起作用.我们当然可以让服务器更新一次到60天,但第61天会发生什么?服务器只是停止能够同步朋友的列表?

D.每次应用程序启动或从睡眠中重新补充水平时,检查FB访问令牌的有效性似乎是有意义的.我们的iOS应用程序检查此功能的最佳方式是什么?是否有推荐的端点来调用验证令牌?我们应该调用https://graph.facebook.com/me传递访问令牌并检查响应吗?

注意:我们当然可以记录expires获得最初扩展令牌的时间,但这不可靠,因为用户可以随时撤销我们的应用程序权限,这使得expires时间成为不可靠的有效数据点

mobile facebook facebook-graph-api ios facebook-access-token

11
推荐指数
1
解决办法
3777
查看次数

支持桌面和移动的单个JQuery页面的提示?

我目前有一个网站托管我想要同时为桌面和移动浏览器提供服务的页面.桌面设计和实现已经完成并使用JQuery.

当用户访问JQuery Mobile支持的移动浏览器时,我希望此页面使用不同的布局.

我正在试图找出最好的方法,但似乎无法找到有关此方法的最佳实践信息.我可以在此找到的所有现有文档/指南都假设您正在编写的jQuery页面专门支持移动浏览器,因此不能解决桌面格式问题.

看似显而易见的选项:

  1. 相同的页面,但只是在现有内容之上的额外标记,以重新格式化移动
  2. 相同的页面,但附加标记复制现有内容,但格式为移动设备.如果是桌面浏览器,则隐藏/不呈现非移动内容.
  3. 移动与非移动之间的一些动态检测然后在两个不同页面之间路由(桌面与移动)

我认为#2可能是最简单的,但我不喜欢页面中重复内容的想法.#1似乎不切实际地认为我可以通过一堆标记来扩充我现有的内容,以神奇地为移动设备提供格式(同时仍然支持桌面).

我很感激任何有关最佳实践可能存在的指南的提示和指示.

澄清:假设我没有使用Rails,ASP.NET MVC等.

jquery jquery-mobile

10
推荐指数
2
解决办法
7304
查看次数

如何使用iOS应用程序在Facebook上的特定朋友的墙上分享内容

使用Facebook Javascript SDK和FB.ui直接触发"提要"对话框在墙上共享是很简单的.

然而,这与大家分享在你的墙上.我正在寻找一种方法来分享特定朋友的墙,而不是在Facebook开发文档中找到任何答案.

我即将放弃,但是他们看到了2011年6月写的这篇文章,其中显示了FB共享UI,显示您可以更改共享的范围:

带有范围的FB共享对话框的屏幕截图

我找不到任何显示如何触发公开这些选项的对话框的信息.我使用了FB dev docs中的示例代码:

<html xmlns:fb="http://www.facebook.com/2008/fbml">
  <body>
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <div id="fb-root"></div>
    <script>
      // assume we are already logged in
      FB.init({appId: '1234567890', xfbml: true, cookie: true});

      FB.ui({
          method: 'feed',
           link: 'https://developers.facebook.com/docs/reference/dialogs/'
          });
     </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

但是,这会产生一个基本上类似于以下内容的对话框.请注意没有像早期屏幕截图那样的范围选项:

在此输入图像描述

注意:即使我在询问Javascript SDK并显示HTML,我最终还是希望使用Facebook iOS SDK将我的iOS应用程序中的链接共享给登录到我的应用程序的用户的个人朋友(同时让它用户选择要分享的朋友.

facebook ios

7
推荐指数
1
解决办法
4万
查看次数