我正在使用一个仪表板Web应用程序,该应用程序使用grant_type=client_credentials
来获取Bearer Token以获得对资源的访问权限。
计划是让MVC控制器代表客户端浏览器对API进行调用。
来自浏览器的ajax请求将命中MVC控制器,然后进行API调用。然后将结果作为JSON反馈给客户端,并在react中进行处理。
客户端永远不应直接与API通信,也不需要登录即可查看仪表板。
应用程序首次加载时,会使用存储在appsettings.json
中的客户端凭据向服务器请求令牌。我可以获取令牌,但不知道在哪里存储和访问令牌。我需要全局访问此令牌,以便在20分钟左右后可以将refresh_token
请求发送到服务器,并在随后的所有对该API的调用中使用它以获取数据。
我可以将其存储在HttpContext
中并从那里使用吗?
目前,我正在请求令牌,如下所示:
public class TokensController : ControllerBase
{
public IConfiguration Configuration { get; }
public TokensController(IConfiguration configuration)
{
Configuration = configuration;
}
// Get Token
public static async Task<Token> GetToken(Uri authenticationUrl, Dictionary<string, string> authenticationCredentials)
{
HttpClient client = new HttpClient();
FormUrlEncodedContent content = new FormUrlEncodedContent(authenticationCredentials);
HttpResponseMessage response = await client.PostAsync(authenticationUrl, content);
if (response.StatusCode != System.Net.HttpStatusCode.OK)
{
string message = String.Format("POST failed. Received HTTP {0}", response.StatusCode);
throw new ApplicationException(message);
}
string responseString = await response.Content.ReadAsStringAsync();
Token token = JsonConvert.DeserializeObject<Token>(responseString);
return token;
}
public IActionResult GetAccessToken()
{
Dictionary<string, string> authenticationCredentials_np = Configuration.GetSection("SomeEnvironment:Credentials").GetChildren().Select(x => new KeyValuePair<string, string>(x.Key, x.Value)).ToDictionary(x => x.Key, x => x.Value);
Token token_np = GetToken(new Uri(Configuration["SomeEnvironment:URL"]), authenticationCredentials_np).Result;
return Ok(token_np);
}
}
有什么建议/想法吗?