我有身份服務器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或類似的東西?
感謝
中號