我使用基于令牌的Oauth系统(Identity 2.0),我有一个继承自RestSharp的RestClient的类,它在不同的控制器中实例化,并且在该类中是我的全部调用我的API。
一旦我的登录功能成功并返回一个令牌,我想保存该令牌,当下一个请求进行API调用时,我希望它能够在头部中使用该令牌,因为我的所有数据敏感部分都是API包含在授权标签中。
public class ApiClient : RestClient
{
private static string CurrentToken;
public string Login(string username, string password)
{
RestRequest request = new RestRequest("Token", Method.POST);
string encodedBody = string.Format("grant_type=password&username={0}&password={1}", username, password);
request.AddParameter("application/x-www-form-urlencoded", encodedBody, ParameterType.RequestBody);
request.AddParameter("Content-Type", "application/x-www-form-urlencoded", ParameterType.HttpHeader);
IRestResponse response = base.Execute(request);
LoginTokenResult result = JsonConvert.DeserializeObject<LoginTokenResult>(response.Content);
if (result.Error != null)
{
return result.Error;
}
CurrentToken = result.AccessToken;
}
}
public class LoginTokenResult
{
public override string ToString()
{
return AccessToken;
}
[JsonProperty(PropertyName = "access_token")]
public string AccessToken { get; set; }
[JsonProperty(PropertyName = "error")]
public string Error { get; set; }
[JsonProperty(PropertyName = "error_description")]
public string ErrorDescription { get; set; }
}
现在这个应用程序将同时拥有多个用户,并且我被告知通过将其声明为静态变量,它会在第二个用户登录时覆盖第一个用户的值。我还读到你不应该使用会话变量来处理这类敏感信息(因为它允许访问数据)
最终,在保持安全的同时,允许该令牌值持续存在的最佳方法是什么。
编辑: 我做了一些研究,我想知道我是否可以在每个请求中使用identity 2.0 cookie而不是存储令牌值本身。关于如何做这样的事情的任何输入?