2016-07-06 5 views
1

Я искал доски, и пока я нашел информацию о CAS (службе централизованной аутентификации), я не нашел никакой информации, касающейся того, как можно было бы получить имя пользователя с сервера CAS после перенаправления обратно в клиентское приложение.Как я могу получить имя пользователя с сервера CAS в C# MVC

При использовании dotNetCasClient.dll я руководствовался инструкциями по настройке моего файла Web.config в соответствии с шагами по GitHub. Ниже приведен код 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-сервер, а после успешной проверки «Action» ActionResult переадресовывает пользователя на определенную страницу.

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

Я успешно протестировал реализацию CAS и может подтвердить, что он работает, как ожидалось, однако я полностью потерял в отношении того, как я бы идти о получении информации от сервера CAS после проверки пользователя.

Любая помощь приветствуется, и если это дубликат, я приношу свои извинения, так как не смог найти что-либо подобное при поиске себя.

ответ

0

Похоже, это может быть вопрос вытягивать значение из HttpContext.Current.User.Identity.Name, который должен возвращать значение имени пользователя CAS аутентифицированного пользователя. Была почта на jasig-cas-user mailing list, которая набросилась на меня.

Another mailing list post предполагает, что другая возвращаемая информация может быть доступна через CasAuthentication.CurrentPrincipal.Assertion.Attributes, но это не особенно хорошо документированы на их вики.

Подразумевается, что доступ к данным из возврата CAS демонстрируется в примере веб-приложения, распространяемого вместе с кодом, но он не очень интуитивно понятен, что он будет там и не документирован нигде. (Я установил с помощью NuGet и вообще пропустил образец приложения. Я действительно нашел ваш вопрос, прежде чем сам нашел ответ!)

+0

Спасибо за ответ. Из того, что я собрал, DotNetCasClient не может получить атрибуты, поскольку это функция, которая была реализована с помощью протоколов CAS 3.0, а DotNetCasClient в настоящее время не поддерживает указанные протоколы. Я действительно работаю с коллегой, чтобы включить протокол 3.0 с использованием OWIN/KATANA, поэтому я надеюсь, что мы сможем добиться достойного прогресса довольно быстро. –