我正在尝试从ADFS获取令牌,我可以将其与内部部署的Windows Service Bus一起使用。我可能没有正确配置ADFS,因为我收到以下消息:
MSIS3127:指定的请求失败。
访问令牌的代码如下:
string adrecaSTS = "trust/13/usernamemixed";
WS2007HttpBinding binding = new WS2007HttpBinding();
binding.Security.Message.EstablishSecurityContext = false;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
binding.Security.Mode = SecurityMode.TransportWithMessageCredential; //https
string baseSSLUri = @"https://<myadfs>/adfs/services/";
WSTrustChannelFactory trustChannelFactory = new WSTrustChannelFactory(binding, new EndpointAddress(baseSSLUri + adrecaSTS));
trustChannelFactory.TrustVersion = TrustVersion.WSTrust13;
trustChannelFactory.Credentials.UserName.UserName = "username";
trustChannelFactory.Credentials.UserName.Password = "password";
WSTrustChannel tokenClient = (WSTrustChannel)trustChannelFactory.CreateChannel();
//create a token issuance issuance
RequestSecurityToken rst = new RequestSecurityToken(RequestTypes.Issue);
//call ADFS STS
SecurityToken token = tokenClient.Issue(rst);
在ADFS上启用了端点,我的客户端(单独域上的笔记本电脑)信任来自ADFS的证书。
我是否需要建立某种信任或进一步的信任?此错误消息不是特别有用。
答案 0 :(得分:1)
见这里:
ValidateToken方法拥有大部分代码 - 但您首先需要从通用令牌中提取InnerXml并将其转换为SAML安全令牌(再次使用令牌处理程序)。
答案 1 :(得分:0)
发现了这个问题。我试图以管理员帐户登录。当我使用普通用户时,它可以工作。
我还必须修改RequestSecurityToken以使KeyType为KeyType.Symmetric
答案 2 :(得分:0)
我看到你解决了你的问题,但这里有一些额外的信息,可以帮助其他可能有相同错误消息但原因不同的人。
AD FS 错误“MSIS3127...”可能有多种原因。对我们来说,这是由我们的依赖方声明规则之一指定的 AD FS 属性存储不存在引起的。
为了调试错误,我们检查了所有运行 AD FS 的服务器上的事件查看器,并在那里找到了指出属性存储问题的详细消息。因此,如果其他人收到相同的错误消息,那么我建议检查 AD FS 上的事件查看器以查看是否有其他日志。
注意 AD FS 记录到 Applications and Services Logs
=> AD FS
=> Admin