2

Google を介して OpenID Connect で認証するために、WebAPI バックエンドを使用して SPA (Angular) アプリをアップグレード中です。理想的には、ハイブリッド フローを使用したいと考えています。

Google サインイン ボタンをクリックした後、ブラウザーが Google にリダイレクトし、同意画面を表示して、コードと ID トークンを含む応答をアプリに送り返すところまで来ました。公開されているシナリオのほとんどは、認証コードが返されたときに通知を起動するように MVC アプリを構成する方法を示しています。

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            ClientId = "",
            MetadataAddress = "https://accounts.google.com/.well-known/openid-configuration",
            RedirectUri = "https://localhost:44300/authentication",
            Scope = "openid profile",

            Notifications = new OpenIdConnectAuthenticationNotifications
            {
                AuthorizationCodeReceived = async n =>
                {

私たちの場合、それは決して発生しません。その理由は、応答がアプリのサーバー側のエンドポイントではなく、SPA に返されるためだと思います。ここでの次のステップは何ですか?

  • クライアントでコードを受け取り、Ajax リクエストを Web API レイヤーに送信してから、それをアクセス トークンと交換しますか? アクセス トークンを取得したら、js から API 呼び出しを行うときにトークンが有効であると認識されるように、ユーザーがサインインしていることをどのように伝えますか。
  • Google に応答を Web API レイヤーに送信するように指示し、アクセス トークンのコードを交換して、最後にアクセス トークンを含むハッシュ フラグメントを含むリダイレクト応答を送信しますか? その場合、通知ハンドラは起動しますか?

どちらの場合でも、コードを交換するために OpenID ミドルウェアの何かを活用できますか? 投稿リクエストはそれほど複雑ではありませんが、可能であれば既存のライブラリを活用するとよいでしょう。

4

1 に答える 1

1

ミドルウェア「 Microsoft.Owin.Security.Google 」を使用することで、より高いレベルの抽象化を使用できると思います。外部の Google アクセス トークンを取得でき、「OAuth 認証コード フロー」に伴う複雑さを気にする必要はありません。ミドルウェアによって処理され、外部アクセス トークンを直接取得します。このミドルウェアのデフォルトのスコープは「openid profile email」であり、確実に上書きできますが、空のスコープを渡した場合はデフォルトで取得されます。このミドルウェアの実装は、こちらで確認できます。

同様に、Web API での Google 外部ログインの使用に関する詳細な投稿をブログに投稿しました。MVC ライブラリは含まれていません。こちらの投稿を確認してください。うまくいけば、あなたのケースに役立つでしょう。

于 2014-11-12T20:25:24.397 に答える