我有此Windows控制台应用程序试图针对ADFS执行Windows身份验证。我已经能够使用用户名/密码进行身份验证,但我不想这样做,因为用户已经在Windows中进行身份验证。在独立应用程序上使用ADFS进行Windows身份验证
我有这样的代码:
//Setup the connection to ADFS
const string adfsEndpoint = "https://iis.dev.lab/adfs/services/trust/13/windowsmixed";
var factory = new WSTrustChannelFactory(new WindowsWSTrustBinding(SecurityMode.TransportWithMessageCredential), new EndpointAddress(adfsEndpoint))
{
TrustVersion = TrustVersion.WSTrust13
};
//Setup the request object
var rst = new RequestSecurityToken
{
RequestType = RequestTypes.Issue,
KeyType = KeyTypes.Bearer,
AppliesTo = new EndpointReference(relyingPartyId)
};
//Open a connection to ADFS and get a token for the logged in user
var channel = factory.CreateChannel();
var genericToken = channel.Issue(rst) as GenericXmlSecurityToken;
,当它试图获得令牌。我有这样的例外:
安全支持提供程序接口(SSPI)身份验证失败。 ser 版可能未运行在身份为“host/iis.dev.lab”的帐户中。如果se rver正在服务帐户(例如,网络服务)中运行,请指定 帐户的ServicePrincipalName作为se rver的EndpointAddress中的标识。如果服务器在用户帐户中运行,请将该帐户的UserPrin cipalName指定为该服务器的EndpointAddress中的标识。
的事情是:
- 用户已经通过身份验证的dev.lab域
- ADSF服务管理员用户帐户下运行在dev.lab域
- 在错误消息中我有域名iis.dev.lab由于某种原因,可能是原因..
问题:
- 我应该使用这个网址( “../adfs/services/trust/13/ windowsmixed”)来执行这种认证的?或者我应该使用kerberosmixed?有人可以指出一些关于ADFS中可用服务目标的文档吗?
- 有没有办法在提出请求之前设置用户的域名?我试过这个
factory.Credentials.Windows.ClientCredential.Domain = "dev.lab";
但它没有解决。 - 即使进行auth验证,我是否还需要定义凭据?像这样的例子:
factory.Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
?
任何帮助表示赞赏。
除非您的域名已启用Kerberos,否则您将需要使用Windows端点。 –