Database 在数据库中存储声明-模式建议?

Database 在数据库中存储声明-模式建议?,database,authentication,wif,claims,Database,Authentication,Wif,Claims,我们目前正在研究基于声明的身份验证,并使用WIF测试自定义STS 我们一直在讨论如何在数据库中存储索赔。 在许多简单示例中,声明作为简单属性存储在单个表UserProfile中,例如,对用户具有FK。 然后生成声明,声明类型是URL加上列名(例如),值当然是数据库中的值 但我需要更复杂的例子。你能分享一些在数据库中存储索赔的方法吗? 我想到的是一个包含所有声明类型的表,以及一个包含每个用户的值的表,每个用户都有一个FK。但我们确实需要一些灵感。因此,您能分享的任何东西都将非常感激。 但同样,这是

我们目前正在研究基于声明的身份验证,并使用WIF测试自定义STS

我们一直在讨论如何在数据库中存储索赔。 在许多简单示例中,声明作为简单属性存储在单个表UserProfile中,例如,对用户具有FK。 然后生成声明,声明类型是URL加上列名(例如),值当然是数据库中的值

但我需要更复杂的例子。你能分享一些在数据库中存储索赔的方法吗? 我想到的是一个包含所有声明类型的表,以及一个包含每个用户的值的表,每个用户都有一个FK。但我们确实需要一些灵感。因此,您能分享的任何东西都将非常感激。 但同样,这是一个非常平坦的结构

使现代化 我试着做一个简单的模型:

对不起,现在还不能发布图片

我认为这对于简单的索赔是好的。但如果我有所谓的嵌套声明呢。 假设索赔类型描述了用户对索赔类型文档的资源人员的权利的索赔。
这可以用那个模型来描述,但如果我们想进一步描述这个说法呢。假设用户对资源人员具有5级访问权限。我看不出这怎么可能。有什么想法吗?

您可能希望考虑两件事:

不同的依赖方RP可以为同一用户生成不同的索赔组。因此,您需要一个链接到索赔类型的RP表

注意:您可以通过wtrealm参数来区分哪个RP

此外,索赔类型可以是一对多。如果存在一种类型的…/claims/groups,并且一个用户属于多个组,则该声明类型将有多个实例


你看过如何实现这一点吗?它使用SQL数据库。

谢谢您的评论。这些都是值得注意的。我看过Identity Server,但据我所知,它使用内置的ASP.NET成员资格提供程序,并添加如下声明:claims.Addnew clainprofileclaimprefix+prop.Name.tolowerinvariance,value;ProviderUserRepository.cs。也是一个非常扁平的结构。我用一个图更新了我的示例。你怎么看?看一看。您是否将特定用户锁定到特定RP?通常,任何用户都可以访问RP。您在RP中可以做什么取决于您的声明。如果不需要,我会删除将用户绑定到RP的表。因此,一旦经过身份验证,找到RP使用的声明,然后根据用户对这些声明的值填充声明。标准是不传递空声明,如果声明值为空,不要构造声明。问题是所有用户都不能访问所有的RPs。我们有一些内部和外部用户,外部用户不允许访问某些应用程序。你还认为这是错误的吗?你没有一个具体的例子来说明你是如何将声明存储在数据库中的,你愿意与他人分享。是吗?在gmail.com上给我一个电子邮件用户名。声明是一个扁平结构。它们不能嵌套。因此,索赔将是……/personal/1或……/personal/5,即两种不同的索赔。最终,它只是一个在RP端解析的字符串。或者,您可以创建一个复杂类型并将其序列化,如下所述:。你觉得这种方法怎么样?那就是围绕序列化构建的WCF。我不知道STS的功能允许你像这样传递声明。您可以在RP端创建复杂对象,其思想是在STS端序列化它,并将其作为资源传递到声明中,不是吗?然后在RP端反序列化它。同意-但是声明是在SAML令牌中传递的,我认为它没有序列化复杂对象的方法。看见