У меня есть проект, который перенаправляет пользователя на сервер cas и после входа пользователя перенаправляет его на мой локальный (я использую виртуальный хост на IIS my.uk.a c .ir). Проблема в том, что когда он возвращает, он не возвращает атрибут. мой проект находится на .net4.5.2 и использую tls12
, это исходный проект, который я модифицировал. https://github.com/casinthecloud/dotnet-cas-client-demo
это ссылка на измененный проект: https://github.com/HamidRezaAshkiyan/dotnet-cas-client-demo моя модификация находится в ветке dev.
Вот мой web.config :
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="casClientConfig" type="DotNetCasClient.Configuration.CasClientConfiguration, DotNetCasClient"/>
</configSections>
<system.web>
<compilation debug="true" targetFramework="4.5.2"/>
<authentication mode="Forms">
<forms name=".DotNetCasClientAuth" loginUrl="https://gate.uk.ac.ir" cookieless="UseCookies"/>
</authentication>
<httpModules>
<add name="DotNetCasClient" type="DotNetCasClient.CasAuthenticationModule,DotNetCasClient"/>
</httpModules>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<remove name="DotNetCasClient"/>
<add name="DotNetCasClient" type="DotNetCasClient.CasAuthenticationModule,DotNetCasClient"/>
</modules>
</system.webServer>
<casClientConfig casServerLoginUrl="https://gate.uk.ac.ir" casServerUrlPrefix="https://gate.uk.ac.ir" serverName="https://my.uk.ac.ir/" notAuthorizedUrl="~/NotAuthorized.aspx" cookiesRequiredUrl="~/CookiesRequired.aspx" redirectAfterValidation="true" gateway="false" renew="false" singleSignOut="true" ticketTimeTolerance="5000" ticketValidatorName="Cas10" proxyTicketManager="CacheProxyTicketManager" serviceTicketManager="CacheServiceTicketManager" gatewayStatusCookieName="CasGatewayStatus"/>
</configuration>
это моя индексная страница, на которую выполняется перенаправление после входа в систему:
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="dotnet_cas_client_demo.secure.index" %>
<asp:Content ID="Content1" ContentPlaceHolderID="content" runat="server">
<ul class="nav nav-tabs">
<li><a href="/index.aspx">Call the /index.aspx page</a></li>
<li class="active"><a href="/secure/index.aspx">You are on the /secure/index.aspx page</a></li>
<!-- #### change with your own CAS server and your host name #### -->
<li><a href="http://gate.uk.ac.ir/logout?service=https://my.uk.ac.ir/">Call the CAS logout</a></li>
</ul>
<h3>
<p>username: <span id="username" runat="server" /></p>
<p>AttributeCount: <span id="attributes" runat="server" /></p>
<p>Attribute: <span id="attribute" runat="server" /></p>
</h3>
</asp:Content>
это внутренний код:
using System;
namespace dotnet_cas_client_demo.secure
{
public partial class index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// get the current authenticated user
username.InnerText = System.Web.HttpContext.Current.User.Identity.Name;
attributes.InnerText = CasAuthentication.CurrentPrincipal.Assertion.Attributes.Count.ToString();
}
}
}
Я не уверен, что правильный способ получения атрибутов или нет.
Я пробовал это решение для java, но мне это не помогло. К клиенту не приходят атрибуты
там, где аналогичная проблема на php, и мои коллеги решили ее с помощью протокола cas 3, и я видел подобное в ответе выше.