Asp.net 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

我正在web API中使用基于令牌的身份验证来验证用户。我正在使用客户端浏览器会话存储来存储访问令牌。这样做安全吗? 我应该把它存放在哪里,这样更安全

 $('#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中