Asp.net web api 在客户端浏览器的会话存储中存储访问令牌是否安全?
我正在web API中使用基于令牌的身份验证来验证用户。我正在使用客户端浏览器会话存储来存储访问令牌。这样做安全吗? 我应该把它存放在哪里,这样更安全Asp.net web api 在客户端浏览器的会话存储中存储访问令牌是否安全?,asp.net-web-api,oauth,access-token,Asp.net Web Api,Oauth,Access Token,我正在web API中使用基于令牌的身份验证来验证用户。我正在使用客户端浏览器会话存储来存储访问令牌。这样做安全吗? 我应该把它存放在哪里,这样更安全 $('#btnLogin').click(function () { $.ajax({ // Post username, password & the grant type to /token url: '/token', method: 'POST', cont
$('#btnLogin').click(function () {
$.ajax({
// Post username, password & the grant type to /token
url: '/token',
method: 'POST',
contentType: 'application/json',
data: {
username: $('#txtUsername').val(),
password: $('#txtPassword').val(),
grant_type: 'password'
},
//response(Access Token) stores inside session storage of Client browser.
success: function (response) {
sessionStorage.setItem("accessToken", response.access_token);
使用
localStorage
或sessionStorage
存储客户端令牌以执行对api的后续身份验证请求是完全安全的,只要您在api中采取适当措施来管理该令牌并确保其安全:
- 生成的令牌不包含部分或全部凭据(用户或密码)
- 令牌不仅仅是base64(username:password),因为它可以很容易地解码并破坏用户凭据
- 令牌有些过期
- 您正在使用https调用api,以确保请求和响应被加密。因此,任何“窥视”的人在发出请求时都看不到令牌或凭据
- 令牌不包含敏感信息
- 令牌已签名(这太好了,这取决于您生成的令牌类型),因此,如果令牌与用户id关联或包含过期本身,则任何人都不能篡改令牌
- 令牌不短(长度),也不容易“猜测”和生成(比如bruce force攻击)。签名确实有助于实现这一点,尤其是令牌本身的过期(例如,请参阅JWT令牌)
本地或会话存储与cookie一样安全,请这样看。如果客户端的设备、cookie或本地存储受到破坏,则整个事情都会受到破坏。因此,在这一点上不会有太大区别。本地存储和会话存储易受XSS攻击,因此不建议存储令牌/se过期时间不会有任何帮助,就好像在加载页面时发生了永久性XSS攻击,攻击可能已经发生。令牌和会话应该存储在仅HTTP的cookie中