1

開発中のWebアプリケーションを、外部のWebアプリケーションと統合して、それらのサービスを使用する必要があります。残念ながら、これは私の最初の仕事であり、少し混乱しています。

彼らは、どのユーザーが私のWebサイトから来ているかを識別できるように、ログイントークンを含む確認URLを提供するように私に求めました。

  1. 私のアプリのユーザーは、サードパーティのアプリデータベースから情報を取得したいと考えています
  2. そのためには、アプリにはさまざまな役割があるため、サードパーティアプリは自分が誰であるかを知る必要があります。そして、それらのそれぞれが3partyアプリで異なる特権を持ちます
  3. 3partyアプリへのログインは私のアプリにある必要があります。ログイントークン付きの確認URLが必要なだけです。

deviseを介してトークン認証を使用してそれを行うことは可能ですか?トークンを生成してクライアントブラウザに保存し、それを使用して外部ドメインで認証を受けることはできますか?

4

1 に答える 1

5

この答えがあまり明白ではないことを願っています。これを始めたばかりで、ガイダンスが必要なようです。

私が読んだものから、私は次の要件を取得します。

  1. 別のアプリの認証機関になることができる必要があります
  2. サードパーティのアプリは、認証トークンを介して資格情報を交換および検証したいと考えています
  3. サードパーティのアプリは、API呼び出しへのURLがあなたのアプリからこれを行うことを望んでいます

これについては広い意味で説明し、具体的な解決策を探してみましょう。基本的に、安全な認証トークンを生成する方法が必要です。Deviseは、authlogicおよび他のいくつかと一緒にこれを行う必要があります。あなたがしたくないことは、あなた自身の認証トークン生成をロールバックしようとすることです。間違いなくあなたのためにこれを行うためにそこにある宝石を使用してください。

トークンが生成されたら、基本的なトランザクションの概要を示します。ここでは、認証トークンがパラメーターとしてコントローラーアクションに渡されるだけです(httpsはこのトランザクションの友だちです、参考までに)。

ここに画像の説明を入力してください

  1. サードパーティのアプリは、アプリから提供されたトークンを使用してAPI呼び出しを行います
  2. アプリは認証トークンの有効性を確認し、認証が成功した場合は、要求されたアクションを実行します
  3. 認証が成功した場合、アプリは認証成功/失敗コード、およびサードパーティアプリが要求したその他の応答データで応答します

トークンがサードパーティのアプリに渡され、それを使用してAPIリクエストを作成できるようにする方法は、アプリをどのように機能させるかによって異なります。ただし、一般的な方法は、次のパターンに従うメソッドを使用することです。

  1. サードパーティのアプリがユーザーに代わってAPIリクエストを行う必要がある場合、サードパーティのアプリはアプリにリダイレクトし、そこでユーザーは資格情報を入力します(まだ入力していない場合)。このように、サードパーティのアプリがユーザーのユーザー名とパスワードを直接取得することはありません。
  2. 認証が成功すると、アプリはコールバックURLにリダイレクトし、アプリによって生成された認証トークンをパラメーターとして渡します。その認証トークンは、認証トークンの有効期限が切れるまで、および有効期限が切れない限り、将来のAPI呼び出しで使用されるものです(もちろん、認証機関であるため、有効期限が切れるのはあなた次第です)。

可能であれば、サードパーティの認証として機能するOAuthプロバイダーまたはその他のメカニズムを実際に使用できると、アプリとサードパーティのアプリの両方が信頼できるようになります。そのルートをたどるには、次のRailscastをチェックしてください:http://railscasts.com/episodes/235-omniauth-part-1

...しかしもちろん、既存のアプリ、特にエンタープライズアプリを使用しているため、oauthプロバイダーをアプリケーションに統合できることはあまり一般的ではありません。ただし、いずれの場合も、可能な場合は常に、認証メカニズムを別のパーティにオフロードすることが望ましいです。これは主に、セキュリティの専門家が認証サービスについて心配し、更新し、アプリコードをあなたに任せてほしいためです。

一方、これを解決する方法としてOAuthプロバイダーを使用しない場合でも、上記のrailscastは、独自のAPI/コールバックメカニズムを構築する際に従うべきアイデアとパターンを提供します。最終的には、一連のAPI呼び出し/アクションになります。もちろん、ルート(これらのAPI呼び出しへのURL)は何でもかまいません。しかし、例として、それらは次のようになります。

/api/auth/:id                     {:controller=>"api", :action=>"auth"}

...これは、パラメーターとして、サードパーティアプリを識別する一意のキー、サードパーティアプリの秘密鍵(基本的にはパスワード)、および成功と失敗の両方のコールバックURLを受け取り、成功/失敗で応答します。成功すると有効な認証トークン。

/api/some/restful/resource/call   # example API call for some RESTful resource you make available
... etc. ...

私が言ったように、サードパーティの認証プロバイダーを使用しない場合でも、私が投稿したレールキャスト(およびフォローアップエピソード)に従うと、他の堅牢なAPIが使用する実装パターンがわかります。Facebook認証を行うためのデモアプリケーションを設定することも非常に有益であり、ワークフローを理解するためだけに、おそらく数時間しかかかりません。

于 2012-03-27T16:33:00.853 に答える