Identity Server 3 - 具有滑动令牌到期的JavaScript资源所有者流

时间:2017-06-01 11:27:03

标签: javascript identityserver3

我希望使用资源所有者流程与JavaScript应用程序实现滑动令牌过期。

我们的代码类似于IdentityServer3.Samples.Clients解决方案中的“JavaScript资源所有者流程”项目。

我希望能够获得一次令牌,然后继续使用该令牌直到它过期(在滑动过期时)。

在sudo代码中,逻辑如下......

  • 如果未定义标记,则调用getToken()并将结果保存到标记变量
  • 使用此令牌变量调用受身份服务器保护的API

我的问题是,如果令牌过期设置为60秒并且我每隔5秒调用一次api,那么在13次尝试时令牌已经过期,但是我希望令牌已经刷新。

我的客户端配置示例如下......

{
  "enabled": true,
  "clientId": "myClient",
  "clientSecrets": [
    {
      "description": null,
      "value": "xxxxxxxxxxx",
      "expiration": null,
      "type": "SharedSecret"
    }
  ],
  "clientName": "myClient",
  "clientUri": null,
  "logoUri": null,
  "requireConsent": true,
  "allowRememberConsent": true,
  "flow": "ResourceOwner",
  "allowClientCredentialsOnly": false,
  "redirectUris": [],
  "postLogoutRedirectUris": [],
  "logoutUri": null,
  "logoutSessionRequired": true,
  "requireSignOutPrompt": false,
  "allowAccessToAllScopes": false,
  "allowedScopes": [
    "openid",
    "email",
    "address",
    "offline_access",
    "scopeA",
    "scopeB"
  ],
  "identityTokenLifetime": 300,
  "accessTokenLifetime": 60, // TODO - token expiry is only 60 seconds for testing purposes
  "authorizationCodeLifetime": 300,
  "absoluteRefreshTokenLifetime": 86400,
  "slidingRefreshTokenLifetime": 43200,
  "refreshTokenUsage": "OneTimeOnly",
  "updateAccessTokenClaimsOnRefresh": false,
  "refreshTokenExpiration": "Sliding",
  "accessTokenType": "Reference",
  "enableLocalLogin": true,
  "identityProviderRestrictions": [],
  "includeJwtId": false,
  "configClaims": [],

  "alwaysSendClientClaims": true,
  "prefixClientClaims": true,
  "allowAccessToAllCustomGrantTypes": false,
  "allowedCustomGrantTypes": [],
  "allowedCorsOrigins": [
    "http://localhost"
  ],
  "allowAccessTokensViaBrowser": true
}

1 个答案:

答案 0 :(得分:0)

我不确定这是一个好模式。纯javascript应用程序不应该处理offlne_access或资源所有者流。此外,将客户端秘密推送到浏览器的坏主意。

这就是为js客户端应用程序设计的隐式流的全部原因,虽然您不会使用刷新令牌,但最终结果将是通过授权端点续订访问令牌。

Brock在这里有一个很棒的js lib:https://github.com/IdentityModel/oidc-client-js