从adfs服务器获取安全令牌时出错

时间:2015-10-26 21:45:15

标签: c# wcf wif adfs sts-securitytokenservice

对ADFS进行身份验证并检查我希望从adfs服务器获取安全令牌的声明。但是,我正在使用的示例代码在请求令牌时始终会生成错误。示例代码如下:

<input type = "checkbox" 
      class = "input-md"
         id = "soloIdaId"
       name = "soloIda" 
      value = "true" 
    checked = "checked"
/>
<input type = "hidden"  
         id = "__checkbox_soloIdaId" 
      value = "true" 
       name = "__checkbox_soloIda" 
/>

我收到以下错误:

未处理的类型&#39; System.ServiceModel.FaultException&#39;发生在System.ServiceModel.dll中 其他信息:ID3082:请求范围无效或不受支持

ADFS服务器中是否缺少不允许提供令牌的配置?使用IdpInitiated Logon的另一段代码可用于生成SAML令牌。 ADFS属性如下 -

 private static SecurityToken RequestSamlToken()
            {
                var factory = new WSTrustChannelFactory(
                    new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential),
                    new EndpointAddress(adfsEndpoint));
                factory.TrustVersion = TrustVersion.WSTrust13;
                factory.Credentials.UserName.UserName = username;
                factory.Credentials.UserName.Password = password;

                var rst = new RequestSecurityToken
                {
                    RequestType = RequestTypes.Issue,
                    KeyType = KeyTypes.Bearer,  
                    AppliesTo = new EndpointReference(realm)
                };

                return factory.CreateChannel().Issue(rst);
            }

1 个答案:

答案 0 :(得分:0)

您似乎没有在ADFS中为rts.AppliesTo属性中传递的网址(代码中的realm变量)创建信赖方

从ADFS收到的令牌不是通用的,它们仅适用于访问您在请求的该属性中传递的特定服务器。即使对于相同的用户身份,如果您需要访问另一台服务器,您也需要从ADFS获取另一个令牌。

此外,您将无法检查请求令牌的应用程序中的声明。您需要将令牌传递给服务器并让服务器向您显示声明。

以下是此类服务器应用的示例:http://blogs.technet.com/b/tangent_thoughts/archive/2015/02/20/install-and-configure-a-simple-net-4-5-sample-federated-application-samapp.aspx