私はASP.NET 5を使用しています。私のソリューションでは、Web API、Identity Server、およびAngular 2プロジェクトがあり、Identityを使用してAngular 2クライアントを認証しています。サーバー、Angular 2クライアントは、HTTPリクエストとWeb API認証トークンでトークンを渡すことでWeb APIを消費し、応答を返します。これについて、ユーザーが認証されているかどうかを確認するカスタム属性を記述しました
APIを使用すると、次の例外が発生し、Web APIが500内部サーバーエラーを返します。
System.InvalidOperationException:IDX10803:構成を取得できません: ' http://xx.xx.xx.x:3926/.well-known/openid-configuration '。 ---> System.IO.IOException:IDX10804:からドキュメントを取得できません: ' http://xx.xx.xx.x:3926/.well-known/openid-configuration '。 ---> System.AggregateException:1つ以上のエラーが発生しました。 ---> System.Net.Http.HttpRequestException:リクエストの送信中にエラーが発生しました。 ---> System.Net.WebException:リモートサーバーに接続できません---> System.Net.Sockets.SocketException:一定時間後に接続されたパーティが適切に応答しなかった、または接続が確立されなかったため、接続の試行に失敗しました接続されたホストがSystem.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure、Socket s4、Socket s6、Socket&でSystem.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)でxx.xx.xx.x:3926に応答できないため失敗ソケット、IPAddress&アドレス、ConnectSocketState状態、IAsyncResult asyncResult、Exception&例外)
Identityserverとアクセストークン検証ミドルウェアが同じアプリケーションでホストされている場合、起動時に競合状態が発生します。
検証ミドルウェアは、まだ利用できないディスカバリドキュメントをロードしようとします。
これらのシナリオでは、検証ミドルウェアのDelayLoadMetadata
フラグをtrueに設定します。
検出エンドポイントを完全に無効にする場合は、検証オプションで発行者とキーマテリアルを構成する必要があります。
私はこのようなものを使用し、それが私の問題を解決しました。
services.AddAuthentication(o => {
o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddCookie(cfg => cfg.SlidingExpiration = true)
.AddJwtBearer(cfg =>
{
cfg.Audience = "http://localhost:4200/";
cfg.Authority = "http://localhost:5000/";
cfg.RequireHttpsMetadata = false;
cfg.SaveToken = true;
cfg.TokenValidationParameters = tokenValidationParameters;
cfg.Configuration = new OpenIdConnectConfiguration(); <-- Most IMP Part
});
このエラーの原因はプロキシであり、以下のコードを実装することで解決できました。
options.BackchannelHttpHandler = new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator,
Proxy = new WebProxy(Configuration["System:Proxy"])
};
「ドキュメントを取得できません: '[pii is hidden]'」が表示された場合は、以下をConfigureServicesに追加する必要があります。
public void ConfigureServices(IServiceCollection services)
{
......
IdentityModelEventSource.ShowPII = true;
}
これがお役に立てば幸いです。
Appsettings.jsonテナントIDを確認し、テナントIDに必要以上に誤ってコピーしていないことを確認してください。
SSOプロジェクトを再構築すると問題が解決しました。 Nugetパッケージもプロジェクトの再構築中に復元されました。これがお役に立てば幸いです。
いくつかの理由でこのエラーメッセージが表示されます。 1つは@leastprivilegeの回答で解決されました。もう1つは、Identity Serverプロジェクトの証明書ファイルがバージョン管理で失われたことです。だから私は壊れたファイルを元のファイルに置き換えるだけでうまくいきました。
これが誰かを助ける場合。
プロジェクトを.net core 2.0にアップグレードした後、このエラーが発生しました
修正。
代わりにappsettings.json内でインスタンスの名前を変更します
"[〜#〜] aad [〜#〜]インスタンス": " https://login.microsoftonline.com/ = "
使用する
"インスタンス": " https://login.microsoftonline.com/ "