2012-03-01 17 views
7

DevailsとOmniauthのあるRails 3.1とモバイルアプリケーション(iOS5)が認証を共有したいと思います。これにより、ユーザーはFacebookでのSSI、またはモバイルアプリケーションへのSSIが可能になり、モバイルアプリケーションはWebサイトの認証にユーザーの資格情報を使ってWebサイトのAPIと対話できるようになります。ウェブサイトとモバイルアプリケーション間の共有Facebookアクセストークン

私は現在、ユーザーがSSIでアカウントにアクセスできるようになっています。また、SSIをサポートしているモバイルアプリケーションも動作しています。どちらも同じFacebookアプリケーションを使用しています。

私の問題は、モバイルアプリケーションがサイトに対して認証するために使用できる2つのものの間で共有されるものを見つけることです。明らかに、どちらも同じユーザーIDにアクセスできますが、これはあまり安全ではないようです。私のモバイルアプリケーションにはアクセストークンがありますが、これはウェブサイトのアクセストークンとは異なりますが、それらは似ていますが、私のウェブアクセストークンは失効します。

ウェブ/ Railsのトークン(本物ではない):

DDDAKnu1dg40BDHEWN0VDssxs8GGF8ZBEEOb38HnS0IUEQC1NSufmPCcGeFkTuw39ZDl7OhlZBD2jwJEqXdAZCtZBflJRQKZB4ZA

モバイル/ iOSのトークン(本物ではない)

BDDAKnu1dg40BDEo3YjZD2hIwjfZB4slXJj3fmHfzLh5q1xZD0ShfJCb6PMjnApkpM0FTuGGvWnzZBQy4GZCMuysEEqhMz8YgruD53TXKTZC0GPFkfVe0b6fe8wieLLOZDDZA

使用

Facebookのaccess token debugger私は、次の(削除すべては、トークン間で同一である)を得る:Web用

/Railsのトークン:携帯電話/ iOS用

App ID: 
XXXXXXXXXXXXXXXX : SomeAppName 
User ID:  
XXXXXXXX : My Name 
Issued: 
1327507734 : 8:08 am Jan 25 2012 
Expires:  
Never 
Valid: True 
Origin: Web 
Scopes: email offline_access 

App ID: 
XXXXXXXXXXXXXXXX : SomeAppName 
Metadata: {"sso":"iphone-safari"} 
User ID:  
XXXXXXXX : My Name 
Issued: 
1327507734 : 8:08 am Jan 25 2012 
Expires:  
Never 
Valid: True 
Origin: Native Mobile 
Scopes: email offline_access 
+0

こんにちは。あなたはこの問題の解決策を見つけましたか?私は今同じ問題に直面しています... – alex

+1

こんにちは。残念ながら、そうではありません。奇妙なことに、それはかなり共通の要件であるように見えるだろう。見ているが、長い時間を費やしたが役に立たなかった。他のものに移動しましたが、すぐにこれを解決する必要があります。 – Undistraction

+0

私のアプリケーションは非常に厳しいセキュリティ要件を持っていませんが、Facebookとチェックして、各アクセストークンに関連付けられたユーザーIDをアカウントと照合するだけです。 – JeffS

答えて

1

FacebookのAPIを少し変更する必要があります。承認時に

[self authorizeWithFBAppAuth:YES safariAuth:YES]; 

[self authorizeWithFBAppAuth:NO safariAuth:NO]; 

あなたがfbAppやSafariでのauthしたいときに、トークンに問題があるsomethimesので

へ。私はこの同じ問題を抱えていました。私のWebサービスのトークンはこれによって異なるのです。

4

私がこれを処理する方法は、モバイルトークンをサーバーに渡し、サーバーにトークンの信頼性をチェックさせることです。これが確認されると、私はuidと電子メールを使って自分のレコードに対して認証を確認できます。

+0

私は今同じ質問をしています。私はあなたの答えを理解していません - トークンがアプリとウェブからのログインで同じでない場合 - どのようにそれを検証しますか?アプリケーションからログに記録されたものを、ウェブ通話でどのように使用していますか? – Dejell

0

これを解決する方法は、モバイル上でFacebook経由で認証し、暗号化されたf_uidをレールアプリに送信し、f_uidを復号化し、実際に誰がサーバーにログインしているかを確認することです。

関連する問題