10

目標: Web サービス (OWIN を使用する ASP.NET Web API) を OpenID Connect で保護したいと考えています。ID プロバイダーは Google です。

重要: 私は Web サービスのみを担当しています。私は Web アプリケーションを持っていません (UI はありません。これは Web サービスを使用するサード パーティによるものです)。

考慮事項: 私の Web サービスはサーバー上で実行されるため、認証コード フロー (またはハイブリッド?) を使用するのが最善だと思います。

これまでの作業: OpenID Connect ( ) を使用するように (Web サービスで) OWIN を構成しましたUseOpenIdConnectAuthentication

現在の動作: 許可されていない誰かが Web サービスにアクセスしようとすると、Web サービスはそのユーザーを Google にリダイレクト (302 を送信) します。私はUIを持っていないので、同意ページを適切に表示するのはサードパーティ次第です. ユーザーが同意して「同意する」を押したとします。

ここで私は立ち往生しています...私が理解している限り、Googleは認証コードを送り返します(私のWebサービスはアクセストークンを取得するために使用できます)。認証コードを入手するにはどうすればよいですか? Google は認証コード フロー ( ResponseType = code) もサポートしていますか?

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
    ClientId = "aClientId",
    ClientSecret = "aClientSecret",
    Authority = "https://accounts.google.com/",
    RedirectUri = "do I need this??",  //I guess here I would register a resources... but what to do in there?
    ResponseType =  "code",            //does Google even support code??
    Scope = "openid",                
    Notifications = new OpenIdConnectAuthenticationNotifications()
    {
        AuthorizationCodeReceived = (context) =>
        {
            var code = context.Code; //I never got to this point so far
            //do stuff
            return Task.FromResult(0);
        }
    },
});

Google を手動で呼び出して (アクセス トークンを取得するため)、次にサインイン (を使用GetOwinContext().Authentication.SignIn(id);) する必要がありますか? それとも、OWIN ミドルウェアがこれを処理しますか?

更新: 再現はこちら: https://github.com/Dunken/WebApiOpenIdConnect

4

0 に答える 0