相关疑难解决方法(0)

客户端 - 服务器身份验证 - 使用SSPI?

我正在研究客户端 - 服务器应用程序,我希望客户端使用用户的登录凭据向服务器验证自身,但我不希望用户必须输入他们的用户名和密码.我当然不想负责安全处理密码.我只需要用户向我证明他们是他们所说的人,然后我的服务器就可以继续执行并随意授予/拒绝命令.

我的用户是域的一部分,因此我希望能够使用他们登录时创建的登录凭据.

我没有使用任何类型的Web服务,也不想使用.我控制客户端和服务器软件,两者都是用纯C#编写的,并使用好的插槽来完成工作.

我更喜欢用纯C#/ .Net来做这件事,但我愿意使用不安全的C#和pinvokes到win32 API,如果这意味着我将完成工作.

我已经在Windows中阅读了一些关于SSPI的内容,但是我在黑暗中有点感觉,因为这种应用程序开发对我来说是新的.

有人知道怎么做这个吗?SSPI是这样的吗?如何在C#中使用SSPI?是否有.Net原生方式,以便我的代码可以保持可移植性?

.net c# sspi windows-authentication

27
推荐指数
1
解决办法
2万
查看次数

获取Kerberos服务令牌时遇到问题

我正在尝试使用以下代码获取Kerberos票证:

public static byte[] GetToken(string username, string password, string domain)
{
    using (var domainContext = new PrincipalContext(ContextType.Domain, domain))
    {
        string spn = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, username).UserPrincipalName;
        var provider = new KerberosSecurityTokenProvider(spn, TokenImpersonationLevel.Impersonation, new NetworkCredential(username, password, domain));
        var token = provider.GetToken(TimeSpan.FromMinutes(1)) as KerberosRequestorSecurityToken;
        return token.GetRequest();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是provider.GetToken()方法引发SecurityTokenValidationException,并显示消息“提供的NetworkCredentials无法创建Kerberos凭据,有关详细信息,请参见内部异常”。内部异常显示为“不支持对在需要Kerberos多分支的用户帐户下运行的服务进行身份验证”。有什么想法吗?

我从此线程获得了代码,看来在这种情况下它起作用了:如何使用SSPI从Kerberos获取服务令牌

c# authentication kerberos

5
推荐指数
0
解决办法
1649
查看次数