IOS クライアントを受け入れるセキュリティのために OAuth 2 を使用して動作するサンプル Web アプリケーションを取得しようとしていますが、少し問題があります。
ブラウザ クライアント
のnode.js/passportサンプル コードを使用して、Google クライアント ID とシークレット (https://code.google.com/apis/console) を追加しました。私がしなければならなかったのは、サーバーの承認コールバックでリダイレクト URI を指すようにすることだけでした。
IOS クライアント
上記と同じサーバー側コードと、IOS 用の gtm-oauth2 ライブラリを使用して、いくつかの問題が発生しました。Google の指示に従ってインストール済みアプリケーションのクライアント ID を作成し、それらを使用するようにサーバーを変更して、ios アプリに追加しました。アプリは Google サインイン ページにアクセスできますが、リダイレクト時にエラーが発生します (リダイレクト URI を変更していないため、これは理にかなっています)。
Google は、リダイレクト URI について次の2 つのオプションを提供しています。
- 何かを壷にする
- ローカルホスト
サーバーは何らかのソートまたはリダイレクトを必要としますが、IOS リダイレクト URI のサブビングは機能しておらず、サーバーが検証のために呼び出される特定の URI を持つ必要があることを考えると、そうすべきではないようです。
passport.use(new GoogleStrategy({
clientID: GOOGLE_CLIENT_ID,
clientSecret: GOOGLE_CLIENT_SECRET,
callbackURL: "http://127.0.0.1:3000/auth/google/callback"
},
function(accessToken, refreshToken, profile, done) {
// asynchronous verification, for effect...
process.nextTick(function () {
// To keep the example simple, the user's Google profile is returned to
// represent the logged-in user. In a typical application, you would want
// to associate the Google account with a user record in your database,
// and return that user instead.
return done(null, profile);
});
}
));
...
app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});
2 つの異なるエラーが発生します。
- ブラウザ クライアントで機能するリダイレクトと、インストール済み/ios アプリのクライアント ID + シークレットの使用 - リダイレクト エラー
- iOS クライアント ID + シークレット + iOS + リダイレクト (urn) の使用 - クライアント エラー
IOS リダイレクト URI を IOS クライアントに追加する必要がありますか、それとも node.js サーバーにある種のリダイレクト パラメータを挿入して、クライアントについて通知する必要がありますか? または、基本的な何かが欠けていますか?