0

私が構築している Ember アプリで、Facebook と Google に対するクライアント側の OAuth2 認証を処理するために使用ember-simple-authしています。toriiそのプロセスから認証コードを受け取ります。

そのコードをクライアントから REST API に送信し、それらをアクセス トークンと交換してユーザー ID を取得し、どの情報にアクセスする必要があるかを把握したいと考えています。

次に、クライアントが BE アプリからの後続のデータ要求で送信できる JSON Web トークンにユーザー ID を入れたいと考えています。

私の問題: OAuth2 認証に Passport を使用する例はすべて、既に提供されている認証コードを交換するだけでなく、サーバー側でユーザーをリダイレクトし、コールバックを使用することに依存しています。

私は何が欠けていますか?これは、多くのアプリで行う必要があるように思えます。

4

1 に答える 1

0

準拠した OAuth 2.0 実装を想定すると、トークン エンドポイント URL への要求を実行し、次の形式POSTを使用して次のパラメーターを提供することによって、アクセス トークンの承認コードを交換できます。application/x-www-form-urlencoded

  • grant_type- に設定する必要がありますauthorization_code
  • code- あなたが持っているコードの値が含まれます。
  • redirect_uri- 認証コードを取得する要求にも含まれている場合は、値が一致している必要があります。

さらに、クライアントに応じて、クライアントにclient_id資格情報が発行されていない場合、またはクライアントがクライアント認証を実行する必要がある資格情報を持っている場合は、パラメーターを提供する必要があります。これは、識別子を含む HTTP 基本認証ヘッダーを渡すことによって実行できます。秘密。

を使用した例ですが、unirest他の HTTP クライアントにも簡単に適用できます。

unirest.post(tokenEndpointUrl)
    .headers({
        'Accept': 'application/json',
        'Content-type': 'application/x-www-form-urlencoded'
    })
    .auth({
        user: clientId,
        pass: clientSecret
    })
    .send(`redirect_uri=${redirectUrl}`)
    .send(`code=${code}`)
    .send('grant_type=authorization_code')
    .end(function (response) {
        // Handle response
    });

基本はおそらく変更されませんが、各プロバイダーのドキュメントを確認してください。拡張機能が配置されているか、情報を提供する方法がより柔軟になっている可能性があるためです。たとえば、Auth0 と Google は同じだと思いますが、application/x-www-form-urlencoded形式だけでなく、JSON エンコードされた本体でパラメーターを渡すこともできます。


更新

特定の認証プロバイダーは、それらと統合する開発者のために物事を簡素化する追加のライブラリを実装する場合があります。たとえば、Auth0は、 Auth0 認証をアプリケーションに統合する方法を抽象化および簡素化する、passport-auth0を提供します。

于 2016-10-14T08:09:13.897 に答える