从ADFS获取令牌

时间:2013-09-25 18:39:18

标签: wcf-security wif claims-based-identity adfs2.0 adfs

我正在尝试从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的证书。

我是否需要建立某种信任或进一步的信任?此错误消息不是特别有用。

3 个答案:

答案 0 :(得分:1)

见这里:

https://github.com/thinktecture/Thinktecture.IdentityServer.v2/blob/master/src/Libraries/Thinktecture.IdentityServer.Protocols/WSFederation/HrdController.cs

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

文件夹/节点下的事件查看器