类中的持久变量

时间:2017-01-23 22:10:07

标签: c# asp.net-web-api asp.net-identity

我使用基于令牌的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而不是存储令牌值本身。关于如何做这样的事情的任何输入?

0 个答案:

没有答案