Javascript 存储访问和刷新令牌的位置
我正在通过JavaScript从我的ASP.NET MVC web应用程序调用OAuth2到我的web API,以验证我的用户并获取令牌。Web API访问SQL Server数据库,在该数据库中使用Identity和典型的AspNetUsers表存储用户登录名。我的API调用返回一个20分钟的访问令牌和一个2周的刷新令牌。API和消费应用程序是我们正在开发的产品,我们的客户将在其中注册。换句话说,所有代码都站在我们这边Javascript 存储访问和刷新令牌的位置,javascript,asp.net,cookies,oauth-2.0,Javascript,Asp.net,Cookies,Oauth 2.0,我正在通过JavaScript从我的ASP.NET MVC web应用程序调用OAuth2到我的web API,以验证我的用户并获取令牌。Web API访问SQL Server数据库,在该数据库中使用Identity和典型的AspNetUsers表存储用户登录名。我的API调用返回一个20分钟的访问令牌和一个2周的刷新令牌。API和消费应用程序是我们正在开发的产品,我们的客户将在其中注册。换句话说,所有代码都站在我们这边 我知道我必须在访问令牌过期之前通过向API传递刷新令牌来刷新它。我的问题是
我知道我必须在访问令牌过期之前通过向API传递刷新令牌来刷新它。我的问题是…我应该将访问和刷新令牌存储在客户机的何处,以便在JavaScript中用于后续API调用或刷新令牌?人们在网上说,在客户端存储任何东西都是不好的,cookies是不安全的,等等,而且没有提供任何解决方案。本地存储?当然,这些都是JavaScript中的Ajax调用,我们正在对API进行调用,因此令牌需要存在于客户端的某个位置!想弄明白这件事真让我抓狂。我知道我至少需要使用HTTPS。身份验证令牌是使用刷新令牌始终可以获得的。因此,有一个拦截器来验证传入和传出的请求,并将auth令牌存储在那里。说到刷新令牌,在我们的应用程序中,我们最初存储在cookie中,后来转移到本地存储 我建议您在数据库中创建一个表来存储刷新令牌和访问令牌。 表结构如下所示 ID、访问\u令牌、刷新\u令牌、上次更新\u时间 无论何时使用访问令牌调用API,请检查令牌的当前时间和上次更新时间,如果超过一小时,您的令牌将无效,因此您需要使用刷新令牌获取另一个有效令牌。 在我的应用程序中,我有55分钟的toke寿命,在此时间之后,toke无效 代码
if (dateTimeDiff > 55) {
var request = (HttpWebRequest) WebRequest.Create("https://www.googleapis.com/oauth2/v3/token");
var postData = "refresh_token=your refresh token";
postData += "&client_id=your client id";
postData += "&client_secret=your client secret";
postData += "&grant_type=refresh_token";
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
request.UseDefaultCredentials = true;
using(var stream = request.GetRequestStream()) {
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse) request.GetResponse();
string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
}
响应将包含新的访问令牌,请不要忘记使用
LastUpdated\u Time
和新令牌更新您的表。嗨,Andy,我正在寻找相同的解决方案-在客户端哪里存储访问令牌和刷新令牌。您有这样做的解决方案吗?我想问题是在哪里存储客户端的访问令牌。您建议将它们存储在数据库中,但是如何再次从数据库中获取访问令牌以使用授权标头进行api调用?请澄清。谢谢