【问题标题】:Refresh tokens Identity Server4刷新令牌 Identityserver4
【发布时间】:2018-07-07 22:14:13
【问题描述】:

我们正在使用 Identity Server4 来保护我们的 API。我们希望使用刷新令牌来获得对 API 的长期访问权限。根据文档(“http://docs.identityserver.io/en/release/index.html”),我们已将 AllowOfflineAccess 设置为 true,但仍然无法正常工作。 AccessTokenLifeTime 过期(3600 秒)后,令牌不起作用。这是客户端:

 return new List<Client>
         {
         new Client
        {
        ClientId = "client",

        // no interactive user, use the clientid/secret for authentication
            AllowedGrantTypes = GrantTypes.ClientCredentials,

        // secret for authentication
            ClientSecrets =
            {
            new Secret("secret".Sha256())
            },

        // scopes that client has access to
            AllowedScopes = { "api1" },
            AccessTokenLifetime=3600,
            AllowOfflineAccess=true
    }

【问题讨论】:

    标签: identityserver4


    【解决方案1】:

    客户端应用必须请求刷新令牌。

    请注意refresh tokens 并非适用于所有流程:

    混合授权码和授权码支持刷新令牌 资源所有者密码流。要请求刷新令牌,客户端 需要在令牌请求中包含 offline_access 范围(并且 必须有权请求该范围)。

    将此行添加到您的客户端代码中:

    .AddOpenIdConnect("oidc", "Open Id connect", options =>
    {
        options.Scope.Add("offline_access");
    }
    

    刷新令牌的工作方式:

    • 登录以获取访问令牌。当您使用“offline_access”范围时,会包含 刷新令牌
    • 使用访问令牌直到它过期。
    • 通过向端点发送刷新令牌来获取新的访问令牌
    • 根据您的策略,您还可以“刷新”刷新令牌本身(将持久刷新令牌替换为新令牌)。或者在令牌过期之前不返回刷新令牌,让用户重新登录。

    【讨论】:

    • 感谢 Ruard,我可以使用混合而不是客户端凭据吗?
    • 实际上我们希望使用刷新令牌来保护我们的 API。
    • 是的,您可以使用混合。这是一个很好的例子:docs.identityserver.io/en/release/quickstarts/…
    • 只是为了确保:刷新令牌与保护资源无关。使用它的唯一方法是将刷新令牌发送到 Ids4 端点,以便对请求进行身份验证以获取新的访问令牌。访问令牌(包含在对 API 的请求中)提供对资源的访问。
    • 只是想得到您的反馈,我正在考虑将 AWS Lambda 与 .NET Core 结合使用。意思是我们不想公开 IS4,我们将在 AWS Lambda 中创建端点,这个端点将与 IS4 交互?这有意义吗?
    猜你喜欢
    • 2019-03-23
    • 2020-09-12
    • 2017-03-30
    • 2019-12-23
    • 2018-08-09
    • 2020-02-23
    • 2017-12-25
    • 1970-01-01
    • 2021-07-05
    相关资源
    最近更新 更多