0

私はアイデンティティサーバー4のセットアップを持っていて、自分のmvcクライアントはアイデンティティサーバーにリダイレクトされ、ユーザーを認証できます。依存性注入へのベアラトークンの追加

私はAPIを呼びたいと思ったら、私は次のことができます。しかし、私は私のAPIを呼び出すメソッドにアクセストークンを渡す必要があります。

コントローラ

public class UserController : Controller 
{ 
    public IActionResult Index() 
    { 
     var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token"); 

     var user = _userService.Get(accessToken); 
     return View(); 
    } 
} 

サービスは

public async Task<User> Get(string accessToken) 
{ 
    var result = await _baseUrl.AppendPathSegment("/v1/User/Get").WithOAuthBearerToken(accessToken).GetJsonAsync<User>(); 

    return result; 
} 

私は何を好むことは、私はクラスではなくグローバルとしてそれを使用できるように、依存性注入パイプラインへのアクセストークンを追加することですすべての呼び出しでそれを渡すことについて心配する必要があります。

public class UserService 
{ 
    private readonly string _bearerToken {get;set;} 

    public UserService(IOptions<UserSettings> userSettings) 
    { 
     _bearerToken = userSettings.Value.BearerToken; 
    } 

    public async Task<User> Get(string accessToken) 
    { 
     var result = await _baseUrl.AppendPathSegment("/v1/User/Get").WithOAuthBearerToken(_bearerToken).GetJsonAsync<User>(); 

     return result; 
    } 
} 

これが正しい方法であるかどうかは完全にはわかりませんが、それは私はどのようにか分からない。おそらく、OnTokenValidatedイベントの一部として考えていました。

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
{ 
    // Other settings here 

    Events = new OpenIdConnectEvents 
    { 
     OnTokenValidated = context => 
     { 
      var accessToken = context.SecurityToken as JwtSecurityToken; 

      if (accessToken != null) 
      { 
       // Over here add the accessToken to IOptions<UserSettings> 
      } 

      return Task.CompletedTask; 
     } 
    }, 
} 

OnTokenValidatedイベントは適切な場所ですか?それはページの読み込みの間にトークンを維持するか、これを行う必要がある他の場所がありますか? IOptionsなどにaccessTokenを追加するにはどうすればよいですか?いくつかのより多くの私はそれを行う方法を発見した調査後

おかげ

M

答えて