asp.net MVC - 如何在 c# MVC 中从 CAS 服务器检索用户名

本文关键字:MVC 服务器 CAS 检索 用户 中从 net asp | 更新日期: 2023-09-27 17:55:29

我已经搜索了这些板,虽然我找到了有关CAS(中央身份验证服务)的信息,但我没有找到任何关于在将用户名重定向回客户端应用程序后如何从CAS服务器检索用户名的信息。

在使用dotNetCasClient.dll时,我已经遵循了根据GitHub上的步骤配置Web.config文件的指南。下面是web.config代码:(注意:出于隐私原因,我不得不替换服务器名称)

    ?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=301880
  -->
<configuration>
  <!-- CAS Configuration -->
  <configSections>
        <section name="casClientConfig" type="DotNetCasClient.Configuration.CasClientConfiguration, DotNetCasClient" />
    </configSections>
  <casClientConfig casServerLoginUrl="https://mycasserver/login"
                   casServerUrlPrefix="https://mycasserver"
                   serverName="https://myappserver"
                   notAuthorizedUrl="~/Home"
                   cookiesRequiredUrl="~/Home/CookiesRequired"
                   redirectAfterValidation="true"
                   gateway="false"
                   renew="false"
                   singleSignOut="true"
                   ticketTimeTolerance="5000"
                   ticketValidatorName="Cas20"
                   serviceTicketManager="CacheServiceTicketManager"
                   gatewayStatusCookieName="CasGatewayStatus" />
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <!--<modules runAllManagedModulesForAllRequests="true">-->
    <modules>
          <remove name="DotNetCasClient" />
      <add name="DotNetCasClient" type="DotNetCasClient.CasAuthenticationModule,DotNetCasClient" />
    </modules>
  </system.webServer>
  <!-- /CAS Configuration -->

  <connectionStrings configSource="connectionStrings.config" />
    <system.data>
      <DbProviderFactories>
        <remove invariant="Oracle.DataAccess.Client" />
        <!-- If any should be in the machine.config -->
        <add name="Oracle Data Provider for .NET" 
             invariant="Oracle.DataAccess.Client" 
             description="Oracle Data Provider for .NET" 
             type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
      </DbProviderFactories>
    </system.data>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />

    <!-- CAS Configuration -->
    <add key="enableSimpleMembership" value="false" />
    <add key="autoFormsAuthentication" value="false" />
    <!-- /CAS Configuration -->
  </appSettings>
  <system.web>
  <sessionState mode="StateServer" />
  <compilation debug="true" targetFramework="4.5" />
  <httpRuntime targetFramework="4.5" />
  <!-- CAS Configuration -->
  <authentication mode="Forms">
        <forms loginUrl="https://mycasserver/login" 
               cookieless="UseCookies"
               path="https://myappserver" />
  </authentication>
  <httpModules>
  <add name="DotNetCasClient" type="DotNetCasClient.CasAuthenticationModule,DotNetCasClient" />
  </httpModules>  
  <!-- /CAS Configuration -->
</system.web>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" 
                extension=".cs" 
                type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
                warningLevel="4" 
                compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" 
                extension=".vb" 
                type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
                warningLevel="4" 
                compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE='&quot;Web'&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</configuration>

根据有关 CAS 客户端的说明,我还在登录页面上方放置了授权标签,以便当用户想要登录时,他们将被重定向到 CAS 服务器登录,并且在成功验证后,"登录"ActionResult 会将用户重定向到特定页面。

    [Authorize]
    public ActionResult Login()
    {
        return RedirectToAction("Index", "Departments");
    }

我已经成功地测试了 CAS 实现,并且可以确认它按预期工作,但是我完全不知道在验证用户后如何从 CAS 服务器获取信息。

感谢任何帮助,如果这是一个重复的帖子,我很抱歉,因为我在搜索自己时找不到任何此类内容。

asp.net MVC - 如何在 c# MVC 中从 CAS 服务器检索用户名

看起来可能是

HttpContext.Current.User.Identity.Name 中提取值的问题,这应该返回经过身份验证的用户的 CAS 用户名的值。jasig-cas-user邮件列表上有一篇文章告诉我这一点。

另一个邮件列表帖子表明,其他返回的信息可以通过CasAuthentication.CurrentPrincipal.Assertion.Attributes访问,但在他们的wiki上并没有特别好的记录。

这意味着从 CAS 返回访问数据在与代码一起分发的示例 Web 应用程序中进行了演示,但不太直观,它会在那里并且没有记录在其他任何地方。(我使用 NuGet 安装,但完全错过了示例应用程序。实际上,在我自己找到答案之前,我就找到了你的问题!