私が達成しようとしているのは、username/passwordの認証を別の.netアセンブリにある関数に渡すIdentityServer4のインスタンスを設定することです。私はOpenID Connectが一つの選択肢だと理解していますが、カスタムIdPを思いついて、山を丘の外に出す印象を与えます。IdentityServer4とカスタム関数を呼び出す
IdentityServerを使用してこれを達成する簡単な方法はありますか?
私が達成しようとしているのは、username/passwordの認証を別の.netアセンブリにある関数に渡すIdentityServer4のインスタンスを設定することです。私はOpenID Connectが一つの選択肢だと理解していますが、カスタムIdPを思いついて、山を丘の外に出す印象を与えます。IdentityServer4とカスタム関数を呼び出す
IdentityServerを使用してこれを達成する簡単な方法はありますか?
はい。 ConfigureServices
メソッドのStartup
では、IProfileService
とIResourceOwnerPasswordValidator
という独自の実装を登録する必要があります。たとえば:IResourceOwnerPasswordValidator
上
services.AddTransient<IProfileService, CustomProfileService>();
services.AddTransient<IResourceOwnerPasswordValidator, ResourceOwnerPasswordValidator>();
ValidatedAsync
方法は、あなたがして、ユーザ名/パスワードにアクセスし、検証のために、独自のアセンブリを呼び出すことができる場所です。そのメソッドからGrantValidationResult
オブジェクトを返して、成功/失敗を示します。たとえば :
public Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
{
logWriter.Debug("Validating resource owner password: " + context.UserName);
if (_userRepository.ValidatePassword(context.UserName, context.Password))
{
context.Result = new GrantValidationResult(context.UserName, "password");
return Task.FromResult(0);
}
logWriter.Debug("Unauthorised resource owner password for: " + context.UserName);
return Task.FromResult(new GrantValidationResult(TokenRequestErrors.UnauthorizedClient));
}
IProfileService
はあなたが要求されているものを調べることにより、例えば、文脈上の請求を設定(ApiResource
定義で定義された)、その後、いずれかのアセンブリへの独自の呼び出しを行うことができる場所であります/それらの主張の詳細を調べる必要があります。