首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FakeItEasy伪造System.Security.Principal.IIdentity?

如何使用FakeItEasy伪造System.Security.Principal.IIdentity?
EN

Stack Overflow用户
提问于 2012-05-28 22:20:19
回答 2查看 590关注 0票数 1

在我的应用程序中,用户通过WIF登录。用户的凭据存储在System.Security.Principal.IIdentity中。现在我想测试一下CreateUser()方法。我必须在某种程度上伪造这个对象。我尝试这样做:返回该对象的-extract方法:

代码语言:javascript
复制
public IIdentity GetIdentity()
{
    return Thread.CurrentPrincipal.Identity;
}

然后在测试文件中执行如下操作:

代码语言:javascript
复制
    var identity = new GenericIdentity("mymail@mydomain.com");
    A.CallTo(() => _userRepository.GetIdentity()).Returns(identity);

但它不起作用。你有什么好办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-29 03:21:23

看看WIF的ClaimsPrincipalHttpModule吧。它将把Windows的身份转换成IClaimsPrincipal,而不需要STS。

还可以看看SelfSTS,这是一个非常有用的工具。

票数 1
EN

Stack Overflow用户

发布于 2021-09-24 21:58:46

创建一个假的WindowsIdentity类:

代码语言:javascript
复制
public class FakeWindowsIdentity : WindowsIdentity
{
    private readonly string _name;

    public FakeWindowsIdentity(string sUserPrincipalName) 
        : base(GetAnonymous())
    {
        _name = sUserPrincipalName;
    }

    public override string Name => _name;
}

我使用的是FakeItEasy,所以我创建了一个伪IPrincipal,如下所示:

代码语言:javascript
复制
IPrincipal fakeUser = A.Fake<IPrincipal>();
A.CallTo(() => fakeUser.Identity)
    .Returns(new FakeWindowsIdentity("domain\\username"));

要分配给线程,请执行以下操作:

代码语言:javascript
复制
Thread.CurrentPrincipal = fakeUser;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10786184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档