【问题标题】:how to call Web Api 2 Refresh Token from the Jquery Ajax如何从 Jquery Ajax 调用 Web Api 2 Refresh Token
【发布时间】:2018-01-12 16:51:36
【问题描述】:

我正在使用带有个人用户帐户身份验证的 MVC 5 Web Api 2。我已将访问令牌的有效期设置为 10 秒。

TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(10),
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = true,
RefreshTokenProvider = new SimpleRefreshTokenProvider()

我想调用 jquery ajax 来获取刷新令牌“/Token, 访问令牌过期后

$.ajax({
    url: '/token',
    method: 'POST',
    contentType:'application/json',
    data: {
        username: $('#txtUserName').val(),
        password: $('#txtPassword').val(),
        grant_type:'password'
    },
    success: function (response) {
        sessionStorage.setItem('accessToken', response.access_token);
        window.location.href = 'Data.html';
    }
}):

【问题讨论】:

    标签: c# jquery ajax


    【解决方案1】:

    登录请求成功后需要保存返回的refresh_tokenaccess_token

    success: function (response) {
      sessionStorage.setItem('accessToken', response.access_token);
      sessionStorage.setItem('refreshToken', response.refresh_token);
      window.location.href = 'Data.html';
    }
    

    然后您可以使用它调用/tokengrant_typerefresh_token。像这样的:

    $.ajax({
      url: '/token',
      method: 'POST',
      contentType:'application/json',
      data: {
        refresh_token: sessionStorage.getItem('refreshToken'),
        grant_type: 'refresh_token'
      },
      success: function (response) {
        sessionStorage.setItem('accessToken', response.access_token);
        sessionStorage.setItem('refreshToken', response.refresh_token);
        window.location.href = 'Data.html';
      }
    }):
    

    将刷新令牌存储在比会话寿命更长的东西中可能更有意义,例如 localStorage 或 cookie。

    【讨论】:

    • 那么access_token过期(10秒)后如何获取refresh_token
    • 你不能。 refresh_token 在/token 登录请求的响应中发送一次 - 正如我在答案的第一部分中提到的那样。
    • 好的我明白了,但是当访问令牌过期时如何在 10 秒后调用刷新令牌
    • 您可以使用setTimeout() 将某些代码延迟一段时间。虽然,我认为这只是为了测试,因为这实际上不是访问和刷新令牌应该如何工作的。
    • 如果用户或客户端登录到应用程序,10 秒后会话过期并且应用程序取消,我希望用户或客户端能够登录一次并且会话或令牌验证生命周期.如何做到这一点............
    猜你喜欢
    • 2014-09-15
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2019-06-16
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多