2017-02-07 16 views
0

私が達成しようとしているのは、username/passwordの認証を別の.netアセンブリにある関数に渡すIdentityServer4のインスタンスを設定することです。私はOpenID Connectが一つの選択肢だと理解していますが、カスタムIdPを思いついて、山を丘の外に出す印象を与えます。IdentityServer4とカスタム関数を呼び出す

IdentityServerを使用してこれを達成する簡単な方法はありますか?

答えて

1

はい。 ConfigureServicesメソッドのStartupでは、IProfileServiceIResourceOwnerPasswordValidatorという独自の実装を登録する必要があります。たとえば: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定義で定義された)、その後、いずれかのアセンブリへの独自の呼び出しを行うことができる場所であります/それらの主張の詳細を調べる必要があります。

関連する問題