2017-08-11 39 views
0

我已经实现了IPersistedGrantStore,并且定义了一个客户端,它的属性RequireConsent和AllowRememberConsent设置为true。我还从该客户端中删除了脱机访问范围,因为根据OAuth规范,我已经在某处读取了同意总是被强制要求脱机访问范围的请求。 当我第一次进入登录屏幕时,我收到同意视图,点击允许并记住我的决定,我可以看到数据库表PersistedGrants中的记录添加了类型user_consent。下一次我尝试登录时,通过执行IPersistedGrantStore从数据库获取该记录,但仍然显示同意视图。如果我再次单击“允许”,DB将引发异常,因为IS4正尝试使用相同的键插入另一个PersistedGrant记录。身份服务器4持久授权没有被使用

我忽略了一些可以使其表现如预期的设置吗? PS。我已经实现了所有主要的商店,并且所有内容都保存在SQL Server数据库中,而不是使用任何InMemory商店。

回答

0

调试的大量后,这里的问题是什么: _ScopeListItem.cshtml从6_AspNetIdentity样品,有代码

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

这一节这显然只有当渲染所需的范围标记。标记为必需的那些范围只是发布到控制器操作的范围。 在我的情况下,我有一个客户端请求OpenId和Profile作为标准范围,还有三个范围由我的ApiResource定义。诚然,我没有按要求标记Api范围,但问题在于默认情况下不需要Profile范围。 因此,当保存同意时,Data属性不包含Profile范围,并且在所有后续登录尝试中发生请求和同意作用域不匹配,从而触发了同意过程。