我希望使用资源所有者流程与JavaScript应用程序实现滑动令牌过期。
我们的代码类似于IdentityServer3.Samples.Clients解决方案中的“JavaScript资源所有者流程”项目。
我希望能够获得一次令牌,然后继续使用该令牌直到它过期(在滑动过期时)。
在sudo代码中,逻辑如下......
我的问题是,如果令牌过期设置为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
}
答案 0 :(得分:0)
我不确定这是一个好模式。纯javascript应用程序不应该处理offlne_access或资源所有者流。此外,将客户端秘密推送到浏览器的坏主意。
这就是为js客户端应用程序设计的隐式流的全部原因,虽然您不会使用刷新令牌,但最终结果将是通过授权端点续订访问令牌。
Brock在这里有一个很棒的js lib:https://github.com/IdentityModel/oidc-client-js