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事件是否正確嗎?這會維護頁面加載之間的令牌還是有其他地方我應該這樣做? 我會如何將accessToken添加到IOptions或類似的東西?

感謝

中號

回答