ASP.NET 安全令牌服务网站

警告

在 ASP.NET STS 项目中,不要右键单击项目并选择“添加 STS 引用...”。 这样做会覆盖 STS 的元数据。

在 Visual Studio 中,打开“文件”菜单,然后选择“新建”、“网站”。 选择 ASP.NET 安全令牌服务网站。

如果查看 web.config 文件,将会看到它与典型 ASP.NET 网站的 web.config 有多处不同。

  • 添加了以下应用程序设置:

    <appSettings> <add key="IssuerName" value="PassiveSigninSTS"/> <add key="SigningCertificateName" value="CN=STSTestCert"/> <add key="EncryptingCertificateName" value=""/> </appSettings>
    

    STS 使用默认证书来签署其颁发的令牌。 此证书的名称为“STSTestCert”,系统已自动将该证书添加到您的证书存储区以供 STS 使用。 该证书文件存在于 STS 项目中。 该文件的密码为“STSTest”。 在生产练习中,不应使用此密码。 您可以将默认证书替换为任何其他证书。 请确保 IIS 进程的用户有权访问任何此类证书的私钥。 还可以选择创建从 IssuerNameRegistry 派生的类型,以通过编程方式对受信任颁发者的证书进行验证。

  • 为所有用户授予了访问联合元数据的权限。 联合元数据包含有关令牌签名证书公钥、STS 公开的终结点以及发出的声明。

    <location path="FederationMetadata"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>
    
  • <system.Web>/<assemblies> 元素现在包含对 Microsoft.IdentityModel.dll 程序集的引用:

    <add assembly="Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    
  • 指定了表单身份验证和登录页面:

    <authentication mode="Forms"> <forms loginUrl="Login.aspx" protection="All" timeout="30" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false" /> </authentication> <!-- Deny Anonymous users. --> <authorization> <deny users="?" /> </authorization>
    
  • 已添加一个跟踪,可以将其取消注释以启用跟踪功能。 有关详细信息,请参阅 WIF 跟踪如何启用跟踪

    <!-- Uncomment the lines below to enable WIF tracing to: WIFTrace.e2e. Open the trace file using the SvcTraceViewer.exe tool (shipped with the WCF SDK available from Microsoft) or a xml viewer. Refer to MSDN if you wish to add WCF tracing. -->
    
      <!--<system.diagnostics> <sources> <source name="Microsoft.IdentityModel" switchValue="Verbose"> <listeners> <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="WIFTrace.e2e" /> </listeners> </source> </sources> <trace autoflush="true" /> </system.diagnostics>-->
    

在 App_Code 文件夹中,打开 CustomSecurityTokenService.cs。

  • 更新 static readonly string[] PassiveRedirectBasedClaimsAwareWebApps 以包括您希望此 STS 向其颁发令牌的信赖方应用程序的 URL。

  • 重写 GetOutputClaimsIdentity 方法时,请添加信赖方应用程序要求 STS 发出的声明,以及您希望 STS 发出的任何自定义声明。

CustomSecurityTokenService.cs 实现以下所需方法。

  1. GetScope。此方法获取调用者的 IClaimsPrincipal 和传入的 RST,并返回令牌颁发请求的配置,由 Scope 类表示。 在此方法中,可以标准化信赖方的地址并选择签署和加密密钥。 通常,对安全令牌进行加密,以便只有信赖方能够读取这些令牌。

  2. GetOutputClaimsIdentity。此方法获取调用者的 IClaimsPrincipal、传入的 RST 和从 GetScope 返回的 Scope 对象,并返回要包括在所颁发令牌中的 IClaimsIdentity。 可通过此方法决定令牌中包括哪些声明。