oauthでReactネイティブアプリと別のNodeJS/Express APIバックエンドを使用します。理解できます https: //github.com/adamjmcgrath/react-native-simple-auth は、React Native app and http://passportjs.org/ NodeJSバックエンドの認証を提供します。ログインとAPIへのアクセスの認証のためにこれら2つを接続する方法がわかりません。
ユーザーがReactネイティブアプリにメールとパスワードまたはFacebook/Twitter/Google経由でログインすることを希望します。アプリにログインしたら、APIに何を送信して確認しますかそれらは認証され、特定のルートにアクセスできますか?
ログインして、ログインしているユーザーの設定を確認するフローの例を次に示します。
この質問には非常に多くのことがあるので、すべてが単一のSO回答に収まらないようになっていますが、ここにいくつかのヒントと、お望みのものに広く収まる一般的な概要を示します達成します。
その音から、あなたはOAuth 2を使用してソーシャルログインを提供することに興味があります承認、そしてファーストパーティ認証 =電子メールとパスワードを使用した代替手段として。ソーシャルログインの場合、OAuth 2暗黙的なフローを使用してアクセストークンを取得します。これは広く認識されているパターンです。 authenticate電子メールとパスワードを持つユーザーは、OpenID Connectに精通することをお勧めします。OpenIDConnectは、OAuth 2の拡張であり、認可。
どちらの場合でも、ユーザーがメール/パスワードのコンボを送信するか、ソーシャルIDプロバイダーを通じて許可を与えると、応答でアクセストークンおよび(オプションで)IDトークンを受け取ります。トークン、おそらくJWT(JSON Web Token、 jwt.io を参照)はbase64エンコードされた文字列として扱われ、JWTの結果を検査するためにデコードできます。ユーザーのメールアドレス、名前などの詳細.
さまざまなタイプのフローの詳細については、 このデジタルオーシャンの優れた概要 を参照してください。
アクセストークンを取得したので、それをすべてのリクエストとともにAPIに渡して、適切に認証されたことを示すことができます。これを行うには、HTTPヘッダー、具体的にはAuthorization
ヘッダーのアクセストークンを渡して、base64でエンコードされたアクセストークン(承認要求に応じて最初に受け取ったもの)の前にBearer
。そのため、ヘッダーは次のようになります。
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJh...
API側では、そのトークンを受け取り、デコードしてから、verifyIDとそのクレームを受け取ります。 sub
プロパティのトークンの一部として渡されるのは、subject、またはリクエストを行うユーザーのIDです。これは、アクセスを識別し、それぞれのユーザーの権限、権限などを使用してAPI側で処理を開始する方法です。また、validateも重要です。 API側でアクセストークンを受け取ったら、スプーフィングまたは手作りされていないことを確認します。
一般的なプロセスは、React Native for OAuth 2暗黙的なフローです。これはソーシャルIDプロバイダーに使用します。
Linking
APIを使用して、デバイス上のブラウザーでそのURLを開き、ユーザーをソーシャルプロバイダーに送信して、ログイン/承認ダンスを実行させます。my-awesome-app://
など、アプリの一部として登録するもので、ソーシャルプロバイダーに渡すリダイレクトURLはmy-awesome-app://auth_complete/
のようになります。これらのURLスキームとディープリンクを構成する方法については、 Linking APIドキュメント を参照してください。暗黙的なフローに固執するか、リソース所有者パスワード付与フローに切り替えるかのいずれかの独自のアカウントのメール/パスワードの組み合わせのオプションがありますif APIとアプリは相互に信頼されています。アプリとAPIの両方を作成していること。 UXのほうがはるかに優れているため、可能な限りモバイルアプリのROPGフローを好みます。別のWebビューを開く必要はなく、アプリで直接UI要素にメールとパスワードを入力するだけです。ということで、次のようになります。
ご覧のとおり、ROPGはより簡単ですが、信頼性の高いシナリオでのみ使用してください。
API側では、Authorizationヘッダー内のトークンを検査し、前述のように、見つかった場合はユーザーが認証されたと想定します。トークンとユーザーのアクセス許可を有効にして検証することは、依然としてセキュリティ上の良い習慣です。リクエストとともに送信されたトークンがない場合、または送信されたトークンの有効期限が切れている場合、リクエストを拒否します。
お役に立てば幸いです!確かにそれはたくさんありますが、それは一般的な概要を提供します。