【发布时间】:2015-12-13 10:05:27
【问题描述】:
我有这个 Windows 控制台应用程序正在尝试针对 ADFS 执行 Windows 身份验证。我已经能够使用用户名/密码进行身份验证,但我不想这样做,因为用户已经在 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) 身份验证失败。服务商 ver 可能不在身份为“host/iis.dev.lab”的帐户中运行。如果这些 rver 在服务帐户(例如网络服务)中运行,请指定 帐户的 ServicePrincipalName 作为 SE 的 EndpointAddress 中的标识 河。如果服务器在用户帐户中运行,请指定该帐户的 UserPrin cipalName 作为服务器的 EndpointAddress 中的标识。
事情是这样的:
- 用户已在 dev.lab 域中通过身份验证
- ADSF 服务正在 dev.lab 域中的管理员用户帐户下运行
- 在错误消息中,我有 iis.dev.lab 域出于某种原因,这可能是原因..
问题:
- 我应该使用这个 url ("../adfs/services/trust/13/windowsmixed") 来执行这种身份验证吗?或者我应该使用 kerberosmixed 吗?有人可以指出一些有关 ADFS 中可用服务的目标的文档吗?
- 有没有办法在发出请求之前设置用户的域?我试过这个
factory.Credentials.Windows.ClientCredential.Domain = "dev.lab";,但没有成功。 - 即使进行 win auth,我还需要定义凭据吗?比如这样:
factory.Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;?
感谢任何帮助。
【问题讨论】:
-
除非您的域启用了 kerberos,否则您将需要使用 windows 端点。
标签: c# windows-authentication adfs