IdentityServer4を使用してAPIを使用するために使用するトークンを配信する認証サーバを開発しています。 MongoDBをデータベースとして使用しています。トークンを取得できるユーザーがあり、より安全なものにするためにトークンを暗号化するカスタム証明書を使用しています。 これはどのように見えるか、私のStartup.cs私AuthenticationServer
のです:あなたは、私がクライアント認証とパスワードの検証を行い、これらのインタフェースのカスタム実装を持って見ることができるようにIDサーバ4 - ディスカバリエンドポイントを無効にする
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
var cert = new X509Certificate2(Path.Combine(_environment.ContentRootPath, "cert", "whatever.pfx"), "whatever");
services.AddIdentityServer().AddSigningCredential(cert)
.AddInMemoryApiResources(Config.Config.GetApiResources());
services.AddTransient<IUserRepository, UserRepository>();
services.AddTransient<IClientStore, ClientStore>();
services.AddTransient<IProfileService, UserProfileService>();
services.AddTransient<IResourceOwnerPasswordValidator, UserResourceOwnerPasswordValidator>();
services.AddTransient<IPasswordHasher<User.Model.User>, PasswordHasher<User.Model.User>>();
}
。これはうまくいきます。
それから私は、生成されたトークンと別のアプリケーションを保護しています、と私はそれがIdentityServerAuthetication
を使用する必要があることが規定されている(ローカルホスト:私のAuthenticationServer
が実行されている5020がある)
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseCors("CorsPolicy");
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "http://localhost:5020",
RequireHttpsMetadata = false,
ApiName = "MyAPI",
RoleClaimType = JwtClaimTypes.Role
});
app.UseMvc();
}
すべてが正常に動作します
のSystem.InvalidOperationException:IDX10803:「:から設定を取得できませんが、私シャットダウンが
AuthenticationServer
が、私はAPIからこのエラーを取得する私が保護していますならば'。 at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.d__24.MoveNext() ---例外がスローされた前の場所からのスタックトレースの終了--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスクタスク) Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.d__1.MoveNext() でSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスクタスク) では失敗:Microsoft.AspNetCore.Server.Kestrel [13]
それで、APIはディスカバリエンドポイントにアクセスして、トークン(私はuserinfo_endpoint
だろうと思う)。
私のポイントは次のとおりです。
- これは、ディスカバリエンドポイントが認証サーバを使用する方法の情報を取得するために使用されているようです(私のためのオープンAPIのために理にかなっている)が、私たちの場合には、我々が開発されていませんオープンAPIなので、私たちのクライアントは合意したものに過ぎず、エンドポイントを事前に伝え、私たちはIPアドレスによって制限する可能性が非常に高いでしょう。
- ディスカバリエンドポイントを無効にする方法と、トークンを適切に復号化するために証明書をAPIでセットアップする方法はありますか。
多分、私は完全な絵が見つからず、私はばかげたことを言っているかもしれませんが、私はその背後にある概念を理解してうれしいです。 ありがとうございます
これは、ディスカバリエンドポイントを使用可能にしてもセキュリティリスクが発生しないことを意味しますか?私はエンドポイントのメタデータを無効にしなければならなかったWCFから来ています。 – Learner