【问题标题】:Identity Sever 4 Persisted Grants not being used未使用 Identity Server 4 Persisted Grants
【发布时间】:2018-01-19 16:56:48
【问题描述】:

我已经实现了 IPersistedGrantStore,并定义了一个将属性 RequireConsent 和 AllowRememberConsent 设置为 true 的客户端。我还从该客户端删除了脱机访问范围,因为我在某处读到,如果根据 OAuth 规范请求脱机访问范围,则始终强制同意。 当我第一次进入登录屏幕时,我看到了同意视图,单击允许并记住我的决定,我可以看到数据库表 PersistedGrants 中的记录被添加为 user_consent 类型。下次我尝试登录时,我的 IPersistedGrantStore 实现会从数据库中获取该记录,但仍会显示同意视图。如果我然后再次单击允许,DB 会抛出异常,因为 IS4 正在尝试使用相同的键插入另一个 PersistedGrant 记录。

我是否忽略了某些会使其按预期运行的设置? PS。我已经实现了所有主要存储,所有内容都保存在 SQL Server 数据库中,不使用任何 InMemory 存储。

【问题讨论】:

    标签: asp.net-identity-2 identityserver4 asp.net-core-1.1


    【解决方案1】:

    经过大量调试后,问题出在: 来自 6_AspNetIdentity 示例的 _ScopeListItem.cshtml,有这部分代码

    @if (Model.Required)
    {
        input type="hidden" name="ScopesConsented" value="@Model.Name" />
    }
    

    这显然只有在范围被标记为必需时才会呈现。那些标记为必需的范围仅是发布到控制器操作的范围。 在我的情况下,我有一个客户端请求 OpenId 和 Profile 作为标准范围,以及由我的 ApiResource 定义的三个范围。诚然,我没有将 Api 范围标记为必需,但问题还在于默认情况下不需要 Profile 范围。 因此,在保存同意时,数据属性不包含配置文件范围,并且在所有后续登录尝试中请求和同意的范围不匹配,这触发了同意过程。

    【讨论】:

      猜你喜欢
      • 2019-04-26
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 2021-06-29
      • 2018-04-21
      • 2018-01-24
      • 2017-12-07
      相关资源
      最近更新 更多