首页 文章

从SQL Server向ADFS添加自定义声明

提问于
浏览
0

我试图通过SQL添加自定义属性,我正在按照[https://blogs.technet.microsoft.com/vinitt/2013/04/15/how-to-use-to-custom-sql-attribute-store-to-generate-claims-and-authorize-user]上的步骤

我使用表'属性'获得了SQL Server设置,但随后我进入了关于中继方信任的步骤...只需编辑不存在的中继方信任 . (应用程序现在正常工作,它是一个使用ADFS提供身份验证的网站,但不是授权) - 我有API端的代码来查询数据库并动态添加声明,但这只适用于服务器边码,我们真的需要JWT中的那些声明 .

所以,看看这篇文章,一切看起来都很棒 . 我得到了SQL Server,我只需要在验证此人的登录后添加规则以命中服务器 .

听起来像小菜一碟,但没有在哪里添加声明规则 - 因为我没有(或需要?)任何中继方信任 - 这可以由AD FS服务器100%处理,因此不需要任何转发 . 我试图添加一个,但无法超越第一个问题 . 猜到了那个,并且无法超越第二个问题 . 此时我放弃了...我怀疑将随机数据输入表单是有效的 .

有人能告诉我如何添加这个吗?请注意:这不是一个sharepoint站点,与Sharepoint无关 . 它是运行角度应用程序的.Net站点,该应用程序重定向到ADFS服务器并使用令牌重定向回来 .

所以,这个索赔的任何错误规则:

c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"]
 => issue(store = "SQL", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/role"), query = "SELECT role from dbo.ADFS_attributes where logon={0}", param = c.Value);

具体来说,属性表具有登录和角色,我正在尝试根据该用户的记录创建角色 . (在这种情况下,它应该为每个结果创建一个(我希望))

我试图将其更改为“选择”管理员角色,以便始终返回要使用的角色,但这也不起作用 . 我没有在事件日志中看到任何错误,只是没有...没有改变回来的JWT ..(仍然是相同数量的声明) - 我甚至似乎无法添加'电子邮件'作为通行证通过索赔,所以我在这里遗漏了一些东西,否则,它在这里遗漏了一些东西......我不知道是什么 .

好的,为了确保这是有效的,我添加了以下声明规则:

=> issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role", Value = "Admin");

是的,将其添加到Active Directory提供商信任,因此它总是会添加“管理员”角色 . 纳达 .

我将它直接添加到“Web应用程序”/“发布转换规则”中,因此不会添加它......不,没有 .

我还验证了'角色'在索赔说明中,并检查发布为接受和发送...

我总是得到JTW中同样的旧10项......

哦,我尝试重新启动'Active Directory联合身份验证服务'服务...并在调试器在网页上启动时标记为“清除浏览器缓存” .

听起来像ADFS实际上并不起作用,或者没有任何声明规则运行 . 某个地方是否存在需要启用“启用自定义规则”的全局设置?

2 回答

  • 0

    This是一篇更好的文章,因为它没有引用SharePoint .

    规则也应该是“问题”而不是“添加” .

    在RP端,添加声明规则 .

    您需要RP信任,因为这是要获取声明规则的应用程序 .

    要手动添加RP信任,请参阅this .

    还有,你提到JWT?你使用什么协议? SAML? OpenID Connect?

  • 1

    事实证明,您可以将规则添加到“应用程序组”/“Web应用程序”,并选择“颁发转换规则”并在其中添加您的SQL声明规则:

    c:[类型==“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name "] => issue(store = " SQL ", types = (" http://schemas.microsoft.com/ws/2008/06/identity/claims/role "), query = "来自dbo.ADFS_attributes的SELECT角色,其中logon = {0}”,param = c.Value);

    如果您有多个角色,这允许您添加多个角色 .

    我没有看到这个的主要原因是,放在这上面的UI(以某种方式)将不同的令牌(没有我的角色)发布回API服务器 . 我正在调查它获得该令牌的位置,为什么令牌未经过验证,(不是来自服务器,或者它会添加我的角色)......很奇怪,

    通过使用PostMan发布到服务器然后查看返回的JWT来解决问题...

    似乎所有JWT签名验证都不是由最后一个人完成的......

相关问题