目標: 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