【问题标题】:Why Does ClaimsPrincipal Have an AddIdentity Method But No RemoveIdentity Method?为什么 ClaimsPrincipal 有 AddIdentity 方法而没有 RemoveIdentity 方法?
【发布时间】:2014-07-12 11:26:12
【问题描述】:

ClaimsPrincipal 类,能够包含多个 ClaimsIdentititite,如下所示:

public ClaimsPrincipal(IEnumerable<ClaimsIdentity> identities)

ClaimsPrincipal 有一个 add 方法 AddIdentity 来向此声明主体添加声明身份。为什么没有 RemoveIdentity 方法?

MSDN ClaimsPrincipal page

【问题讨论】:

    标签: c# asp.net security claims-based-identity


    【解决方案1】:

    不可避免地,当有人问为什么某些功能不存在时,我总是link and quote Eric Lippert

    有人问我“为什么 C# 不实现功能 X?”每时每刻。答案总是一样的:因为从来没有人设计、指定、实施、测试、记录和发布该功能。所有这六件事都是使功能发生所必需的。所有这些都花费了大量的时间、精力和金钱。功能并不便宜,我们非常努力地确保仅发布那些在时间、精力和资金预算有限的情况下为用户带来最大利益的功能。

    所以你的问题毫无用处。但是,我认为您要问的是:

    ClaimsPrincipal 有一个 AddIdentity 方法,但没有 RemoveIdentity 方法,我该如何删除一个 Identity。

    无论出于何种原因,您要查找的方法不在ClaimsPrincipal 上,而是在ClaimsIdentity 上作为方法RemoveClaim() 或首选TryRemoveClaim()

    尝试从声明身份中删除声明。

    【讨论】:

    • 我知道 RemoveClaim,但这不是我问的。 RemoveClaim 不会删除 ClaimsIdentity 它会从 ClaimsIdentity 中删除单个声明。
    • 另外,我问是因为允许多个 ClaimsIdentities 并提供 Add 方法但没有 Remove 方法似乎是短视的。也许他们没有预见到需要删除 ClaimsIdentity。我真的对这背后的理由很感兴趣。
    • 这可能是因为当您更改用户时,通过重新认证,您通常会更改整个主体,而不仅仅是身份。一旦您知道用户是谁,他们的身份可能会改变,但通常不会完全停止存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 2011-07-16
    • 2015-05-01
    • 2014-03-07
    • 2011-06-12
    • 2013-01-18
    相关资源
    最近更新 更多