【发布时间】:2014-02-09 23:53:28
【问题描述】:
我们目前正在研究基于声明的身份验证,并使用 WIF 测试自定义 STS。
我们一直在讨论如何在数据库中存储声明。 在许多简单示例中,声明作为简单属性存储在具有用户 FK 的单个表(例如 UserProfile)中。 然后生成声明,声明类型是 URL 加列名(例如http://.../claims/email),值当然是数据库中的值。
但我需要更复杂的示例。你能分享一些在数据库中存储索赔的方法吗? 我在想一个包含所有声明类型的表,以及一个包含每个用户的值的表(对用户有一个 FK)。但我们真的需要一些灵感。因此,您可以分享的任何内容将不胜感激。 但同样,这是一个非常“扁平”的结构......
更新
我试着做一个简单的模型:http://imageshack.us/photo/my-images/690/suggestionn.png/
抱歉,还不能发布图片。
我认为这对于简单的声明很有用。但是,如果我有我所谓的“嵌套声明”怎么办。 假设声明类型描述了用户有一个声明,该声明描述了他对声明类型“文档”的资源“人员”的权利。 这可以使用该模型进行描述,但是如果我们想进一步描述该声明怎么办。假设用户对资源“人员”具有 5 级访问权限。我看不出这怎么可能。有什么想法吗?
【问题讨论】:
-
声明是一个扁平的结构。它们不能嵌套。所以索赔将是 .../Personnel/1 或 .../Personnel/5 (即两个不同的索赔)。最终,它只是一个您在 RP 端解析的字符串。
-
或者您可以创建一个复杂类型并将其序列化,如下所述:msdn.microsoft.com/en-us/library/ms734687.aspx。您如何看待这种方法?
-
那是围绕序列化构建的 WCF。我不知道允许您像这样传递声明的 STS 功能。您可以在 RP 端创建复杂对象 ala syfuhs.net/post/2011/11/12/Strongly-Typed-Claims.aspx
-
这个想法是在 STS 端序列化它,并将它作为资源在声明中传递,不是吗?然后在 RP 端反序列化。
-
同意 - 但声明是在 SAML 令牌中传递的,我认为它没有用于序列化复杂对象的方法。见social.msdn.microsoft.com/Forums/en-US/Geneva/thread/…
标签: database authentication wif claims