标签: wif

WIF手动生成federationmetadata.xml

我正在玩Windows身份基础,我正在尝试创建一个基于MVC.NET的安全令牌服务,并将其用作单点登录应用程序.

我唯一的问题是我不知道如何生成federationmetadata.xml文件.

有手动生成此文件的工具吗?

.net federated-identity wif

8
推荐指数
1
解决办法
7125
查看次数

WS-Trust,OpenID和SAML Passive有什么区别?

似乎Microsoft ADFSv2支持WS-Trust和SAML Passive,但它构建的WIF堆栈不支持SAML.

WS-Trust和SAML-P有什么区别?它们是否共享相同的安全漏洞,如果是这样,它们是什么?

注意:这里有一个类似但不同的问题:

SAML与OAuth

adfs saml wif federation adfs2.0

7
推荐指数
1
解决办法
1万
查看次数

使用从STS分配的令牌来调用WCF服务

我一整天都在盯着这一点无济于事,我没有想法.IP-STS处理登录,然后将其传递给RP-STS,RP-STS用声明填充令牌,然后到网站上.这工作正常.我在IP-STS上有一些WCF功能,例如更改密码/重置密码,需要访问它们.阅读后,我应该能够将已经分配的令牌发送到WCF,以确保用户通过身份验证.从我可以看到它发送令牌但不正确,也不是我想要的方式,因为它似乎需要一个用户名.

理想情况下,我希望它获取分配给用户的令牌,而不必重新请求或重新创建任何内容,并且绝对不需要用户名/密码.

我目前得到的错误是: 从另一方收到了一个不安全或不正确安全的故障.请参阅内部FaultException以获取故障代码和详细信息.

详细信息: 无法处理消息.这很可能是因为"http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue"操作不正确,或者因为邮件包含无效或过期的安全上下文令牌,或者因为存在不匹配绑定之间.如果服务由于不活动而中止了通道,则安全上下文令牌将无效.要防止服务中止空闲会话,请过早增加服务端点绑定的接收超时.

这是我的网络配置中的相关位.

客户端web.config


<system.serviceModel>
<bindings>
  <customBinding>
    <binding name="UsernameBinding">          <security authenticationMode="UserNameForCertificate"                  requireSecurityContextCancellation ="false"                  requireSignatureConfirmation="false"                  messageProtectionOrder ="SignBeforeEncryptAndEncryptSignature"                  requireDerivedKeys="true">
      </security>
      <httpTransport/>
    </binding>
  </customBinding>
  <wsFederationHttpBinding>
    <binding name="HTTPEndpoint" closeTimeout="00:10:00" openTimeout="00:10:00"
      receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false"
      transactionFlow="false" hostNameComparisonMode="StrongWildcard"
      maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
      textEncoding="utf-8" useDefaultWebProxy="true">
      <security mode="Message">
        <message issuedTokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1"   negotiateServiceCredential="false">              <claimTypeRequirements>

            <add claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" isOptional="false" />
          </claimTypeRequirements>

          <issuer address="http://localhost:13422/MembershipService" bindingConfiguration="UsernameBinding" binding="customBinding">
            <identity>
              <certificateReference findValue="STSTestCert" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="TrustedPeople" />
            </identity>
          </issuer>
        </message>

      </security>
    </binding>
  </wsFederationHttpBinding>
</bindings>

<behaviors>
  <!-- Credentials configuration -->
  <endpointBehaviors>
    <behavior name="ServiceBehavior"> …
Run Code Online (Sandbox Code Playgroud)

c# model-view-controller asp.net-mvc wcf wif

7
推荐指数
1
解决办法
4931
查看次数

混合模式联合身份验证和表单身份验证

我正在尝试进行混合模式身份验证,以便能够将某些用户置于联合身份验证上,而其他用户则使用Forms身份验证.

我正在使用WIF,我设置了我的STS,一切都很开心,当我处于联邦模式时,通过这种方式关闭所有身份验证:

<authorization>
    <deny users="?" />
</authorization>
<authentication mode="None" />
Run Code Online (Sandbox Code Playgroud)

我登录到我的主应用程序然后当我登录到我的侧面应用程序时,它将让我以静默方式登录,因为会话cookie已经生成并且用户已经过身份验证.

但是当我使用Forms身份验证时,当我登录到我的应用程序时,它会将我带到我理解的登录页面,因为用户未经过身份验证,但即使有了会话cookie,它也不会默默地重定向它.

我知道我需要将onEndRequest重定向到STS以对用户进行身份验证,如果用户已经过身份验证,那么它将生成FedAuth cookie并且它会以静默方式登录我,

有谁知道如何实现这一点,我研究时没有找到有关它的资源.

阿拉

forms-authentication passive-sts wif single-sign-on ws-federation

7
推荐指数
1
解决办法
1925
查看次数

MachineKeySessionSecurityTokenHandler和会话令牌在应用程序重新启动之间到期

在我的MVC应用程序中,我使用表单身份验证来验证用户,然后System.IdentityModel.Services.SessionAuthenticationModule继续会话.

虽然我还没有在这里有必要的时候,我也希望利用System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler这样应用程序将很好地住在一个Web场(由多米尼克·拜尔描述这里).

我遇到的问题是,鉴于基于machineKey的处理,我希望会话不仅可以从服务器机器到机器有效,而且还应该在应用程序重启后继续存在.但是,每当我重新启动或重建应用程序时,在浏览器中点击应用程序时,cookie显然会变为无效,我会被退回到身份验证屏幕.一旦再次验证,一切都很好,会话仍然存在.但是,下次应用程序重新启动或重建时,我不得不重新进行身份验证.

我确定这是WIF的一个方面,我没有得到,但我只是不知道从哪里转过来.我不怕延伸MachineKeySessionSecurityTokenHandler,但我想确保在我继续之前我理解这里发生了什么.我知道默认情况下SessionSecurityTokenHandler使用DPAPI结合应用程序池中的某些标识符进行加密,因此在这种情况下会发生这种情况,但这种行为MachineKeySessionSecurityTokenHandler让我感到困惑.应用程序中是否仍有一些标识符在重新启动时重新创建MachineKeySessionSecurityTokenHandler依赖?我只是错过了一个设置吗?

以下是我的web.config中的相关部分:

<configSections>
  <section name="system.identityModel"
           type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</configSections>
Run Code Online (Sandbox Code Playgroud)

...

<system.identityModel>
  <identityConfiguration>
    <securityTokenHandlers>
      <remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    </securityTokenHandlers>
  </identityConfiguration>
</system.identityModel>
Run Code Online (Sandbox Code Playgroud)

...

<system.web>
  <machineKey compatibilityMode="Framework45"
              validationKey="E27893..."
              decryptionKey="ABC..." 
              validation="SHA1" decryption="AES" />
  <authentication mode="Forms">
  <forms loginUrl="~/Account/Login"
         timeout="10080" />
  </authentication>
</system.web>
Run Code Online (Sandbox Code Playgroud)

...

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="SessionAuthenticationModule"
         type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </modules> …
Run Code Online (Sandbox Code Playgroud)

claims-based-identity wif

7
推荐指数
1
解决办法
3939
查看次数

WIF SessionSecurityToken到期

我正在尝试实现滑动会话到期.我正在使用Windows Azure ACS,.Net 4.5,WIF.当我第一次收到令牌时,我正在做的是将其默认过期时间设置为2小时,并将该令牌写入cookie,如下面的代码所示:

internal void SetSession(ClaimsPrincipal principal)
{
    var sessionToken = new SessionSecurityToken(principal, TimeSpan.FromMinutes(120));
    FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
    Thread.CurrentPrincipal = principal;
}
Run Code Online (Sandbox Code Playgroud)

在这个时候,如果我检查ValidFrom,并ValidTo在属性sessionToken变量,我得到适当的值,如下面的截图:

在此输入图像描述

现在实现滑动会话到期,我SessionAuthenticationModule_SessionSecurityTokenReceived在我的Global.asax文件中处理事件,如下所示:

    void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e)
    {
        var sessionToken = e.SessionToken;
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我检查令牌的ValidFromValidTo属性时,它不是我在将令牌编写为cookie时设置的内容,如下面的屏幕截图所示:

在此输入图像描述

不知道为什么会这样.任何人都可以解释一下我做错了什么.

更新:

这是我注意到的一件有趣的事情.我实现滑动会话的方式是检查令牌的ValidTo属性并将其与当前日期/时间(UTC)进行比较.如果差异小于5分钟,我将ValidTo时间增加2小时并重新发出cookie,如下面的代码所示:

    void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e)
    {
        var sessionToken = e.SessionToken;
        var currentDateTime = DateTime.UtcNow.Ticks;
        var sessionExpirationDateTime = sessionToken.ValidTo.Ticks;
        if (sessionExpirationDateTime >= currentDateTime)
        {
            var renewTokenWindow …
Run Code Online (Sandbox Code Playgroud)

azure claims-based-identity wif acs .net-4.5

7
推荐指数
1
解决办法
2572
查看次数

如何使用MCV5/OWIN更新cookie声明

我们正在开发一个OWIN MVC5项目.我们使用自己的实现IUserStore<T>来集成用户管理,这是我们公司框架的一部分.到目前为止这个工作正常.我们希望通过声明提供角色成员资格和其他安全配置.我已经看到(并快速测试)实现IUserClaimStore<T>或附加ClaimsIdentityFactory到UserManager的方法.

在这两种情况下,我都会看到声明存储在用户的cookie中以及当角色或其他声明在Web应用程序后面发生变化时(通过另一个直接访问用户管理存储的应用程序),用户cookie包含旧的声明和用户拥有的权限太多或太少都不如她应该拥有的权限.

我想到的一种可能性是,检查每个请求或某个时间间隔内的请求,是否已更改用户声明的后端配置,如果是,则刷新用户cookie.

这是正确的方法还是MVC5/Owin提供更优雅/有效的方式来满足此要求.如果这是正确的方法,哪里是检查和更新cookie信息的最有效的地方?

cookies wif owin asp.net-mvc-5 asp.net-identity

7
推荐指数
1
解决办法
2938
查看次数

与MVC5中现有用户数据库的复杂身份验证

我正在将SaaS应用程序从Classic ASP迁移到.NET MVC5,并将使用EF6 Database First.最终用户的登录表单可由每个租户自定义(在他们自己的子域上,但指向同一个Web应用程序).我们希望使用现有的数据库架构和新的身份验证和授权过滤器.

例如,一个租户上的用户可以通过输入他们的名字,姓氏和我们系统生成的代码来登录.另一个租户的用户可以通过输入他们的电子邮件地址和密码来登录.此外,每个租户都有一个单独的管理员登录名,该登录名使用用户名和密码.另一个租户可以对远程AD服务器使用LDAP身份验证.

有自定义身份验证的最佳实践方法吗?

几乎每篇文章都提出了不同的实现方法:简单地设置FormsAuthentication.SetAuthCookie,使用自定义OWIN提供程序,覆盖AuthorizeAttribute等.

在Classic ASP中,我们查询数据库以找出该租户的登录类型,在登录屏幕上显示相应的字段然后在回发后,检查字段是否与数据库中的内容匹配,然后适当地设置会话变量检查每个页面请求.

谢谢

asp.net authentication wif asp.net-mvc-5 asp.net-identity

7
推荐指数
1
解决办法
7462
查看次数

使用.NET 4.5(System.IdentityModel)/ WIF解密SAML 2断言

我正在尝试解密从基于Java的身份提供程序发出的加密SAML 2.0断言.

鉴于以下安全令牌处理程序的设置:

X509Certificate2 cert = ... // Contains private key
var serviceTokens = new List<SecurityToken>();
serviceTokens.Add(new X509SecurityToken(cert));

var issuers = new ConfigurationBasedIssuerNameRegistry(); 
issuers.AddTrustedIssuer("...thumbprint...", "nottherealname");

var configuration = new SecurityTokenHandlerConfiguration
            {
                AudienceRestriction = { AudienceMode = AudienceUriMode.Never },
                CertificateValidationMode = X509CertificateValidationMode.None,
                RevocationMode = X509RevocationMode.NoCheck,
                IssuerNameRegistry = issuers,
                MaxClockSkew = TimeSpan.FromMinutes(5),
                ServiceTokenResolver = SecurityTokenResolver.CreateDefaultSecurityTokenResolver(serviceTokens.AsReadOnly(), false)
            };

var tokenHandlers = SecurityTokenHandlerCollection.CreateDefaultSecurityTokenHandlerCollection(configuration);
Run Code Online (Sandbox Code Playgroud)

我得到一个加密的SAML断言,例如:

<saml:EncryptedAssertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
  <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Type="http://www.w3.org/2001/04/xmlenc#Element">
    <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" />
    <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
      <xenc:EncryptedKey>
        <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
        <xenc:CipherData>


    <xenc:CipherValue>Fwhv/zEVi3eQvQN372L1S+pVDM5JKs1Kc2I25djuiOPdwKReCXRhnd5QL4Y8wJDWZ5vAlOxHkNAZ
OwOg4NsSI8KssrygNk4fwvNdVAGMB5ytI1QTGRqG6WwP4Em+uLN3VXbqiLWA9D6uO0BwATF9HdTb
j/IMhGCxZ1ZKrKQF5OL2PHKf4DqyNa5d9CNZenhYyYghgYrhgZtQVl/VARAp9VKsM/lbkPsEU8Ty
ow4LnTlYqBnykrOEJowN5B+HXGvfhbIBHyGzdCC+WbcEbI898zy/VhZ63VyFL2GSTdDWv10IEMy5
CHom4Qruer1xpyQMrxJ6EK30HMhVppToivgoFQ==</xenc:CipherValue> …
Run Code Online (Sandbox Code Playgroud)

c# encryption wif saml-2.0

7
推荐指数
1
解决办法
7068
查看次数

Web-farm适合实现SessionSecurityTokenCache

我需要实现SessionSecurityTokenCache才能在负载均衡的Web场中使用WIF.我可以使用这个类适合(例如基于SQL)的Web服务器实现,还是我真的需要创建自己的?

web-farm wif

7
推荐指数
0
解决办法
308
查看次数