私は、asp.net WebAPIのフロントエンドとバックエンドAPIとして角度のあるプロジェクトに取り組んでいます。ホストされているOpenId接続サーバー(mitreid)があり、認証と承認にそのサーバーを使用する必要があります。mitreId openidサーバを角型と.net webapiアプリケーションで使用する
私は、.NET WebAPIのにはOpenID Connectサーバー認証を設定しようとしています、 これは私が
以下のような、でもコンフィギュレーションを設定しようとしたWebAPIの のStartUp.csにapp.SetDefaultSignInAsAuthenticationType("OpenIdConnect");
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = "some_client",
ClientSecret = "some_secret",
Authority = "http://localhost:8181/openid-connect-server-webapp",
UseTokenLifetime = true,
ResponseType = "code",
Scope = "openid email",
SignInAsAuthenticationType = "OpenIdConnect",
TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false,
ValidateAudience = false
},
Notifications = new OpenIdConnectAuthenticationNotifications()
{
AuthorizationCodeReceived = (context) =>
{
var code = context.Code;
return Task.FromResult(0);
},
RedirectToIdentityProvider = async n =>
{
n.ProtocolMessage.RedirectUri = "http://localhost:54464/";
n.OwinContext.Authentication.Challenge(new String[] { "OpenIdConnect" });
},
SecurityTokenValidated = (n) =>
{
var nid = new ClaimsIdentity(n.AuthenticationTicket.Identity.AuthenticationType, "user", "user");
nid.AddClaim(new Claim("id_token", n.ProtocolMessage.IdToken));
nid.AddClaim(new Claim("access_token", n.ProtocolMessage.AccessToken));
nid.AddClaim(new Claim("expires_at", DateTimeOffset.Now.AddSeconds(int.Parse(n.ProtocolMessage.ExpiresIn)).ToString()));
nid.AddClaim(new Claim("app_specific", "some data"));
n.AuthenticationTicket = new AuthenticationTicket(nid, n.AuthenticationTicket.Properties);
return Task.FromResult(0);
},
SecurityTokenReceived = (context) =>
{
var code = context;
return Task.FromResult(0);
},
AuthenticationFailed = (context) =>
{
//some redirect
context.HandleResponse();
return Task.FromResult(0);
}
}
});
をやったものです
ConfigurationManager =
new ConfigurationManager<OpenIdConnectConfiguration>
("http://localhost:8181/openid-connect-server-webapp/.well-known/openid-configuration"),
Configuration = new OpenIdConnectConfiguration
{
Issuer = "http://localhost:8181/openid-connect-server-webapp",
AuthorizationEndpoint = "http://localhost:8181/openid-connect-server-webapp/authorize",
TokenEndpoint = "http://localhost:8181/openid-connect-server-webapp/token",
UserInfoEndpoint = "http://localhost:8181/openid-connect-server-webapp/userinfo"
},
APIを(ポート54464で)デバッグしようとすると、コントローラにauthorize attrを置くと、OpenIDログインページにリダイレクトされ、ログインに成功してコントローラアクションが実行されません。 これは最初に呼び出したAPIの http://localhost:54464/api/common/getlist
を最初に呼び出しているAPI呼び出しで、JSON配列を返す代わりにhttp://localhost:54464/api/common/getlist/?code=V7KFPZ&state=OpenIdConnect.AuthenticationProperties%3D****somecode****
にリダイレクトするとします。
成功した郵便配達員から上記のリダイレクトされたURLのコードを使用してベアラトークンを生成しようとしました。ただし、postmanを使用して認証ヘッダーでトークンを使用しようとすると、応答はOpenIDログインHTMLページになります。私は何かが欠けてる知っ
通知イベントの発行どれもRedirectToIdentityProvider
以外に実行されていないが、私はこれまでかなり新しいよ、私にそれらをポイントしてください。何か間違ったこと、設定ミス、OpenIdクライアントを実装しているソリューションを教えてください。
認証コードフローを使用しています。あなたのAngularアプリケーションはスタンドアローンのSPAで、WebAPIアプリケーションと同じホスト名とポートでホストされていないとします。このようなシナリオでは、暗黙のフローがあります。 Angularアプリケーションはログイン自体を処理し、IDとアクセストークンを取得します。次に、アクセストークンをAPIに送信してリソースを取得します。私はクライアントライブラリとして 'oidc-client'(NPM)を使い、apiには' IdentityServer3.AccessTokenValidation'(NuGet)を使います。あなたがこの方向に行きたいなら、私に知らせてください。私は答えを提供します。 – mode777
はい、このアプローチに関するいくつかの洞察を提供してください。 – NikhilGoud