2010-06-10 7 views
5

Je crée une application Silverlight hébergée sur ASP.NET Web App./Site Web compatible IIS7/SSL.
Pour plus de sécurité, je peux mettre ma page silverlight dans un dossier Membres dans le Application Web ASP.NET et restreint l'accès des utilisateurs anonymes. (Voir ci-dessous web.config)Redirection de page de connexion ASP.NET Problème

lorsque les utilisateurs tentent d'accéder à des pages sous dossier Membres, ils sont redirigés vers https://www.ssldemo.com/authenticationtest/login.aspx. (voir web.config ci-dessous) (J'ai mappé www.ssldemo.com à 127.0.0.1). pour la sécurité, je passe à HTTPS dans login.aspx, et de nouveau à HTTP après validation. ci-dessous est le code pour login.aspx.cs.

protected void Page_Load(object sender, EventArgs e) 
    { 
     LoginControl.LoggedIn += new EventHandler(LoginControl_LoggedIn); 
    } 

    void LoginControl_LoggedIn(object sender, EventArgs e) 
    { 
     //for going to ReturnURL & switching back to HTTP 
     string serverName = HttpUtility.UrlEncode(Request.ServerVariables["SERVER_NAME"]); 
     string returnURL = Request["ReturnURL"]; 
     Response.Redirect(ResolveClientUrl("http://" + serverName + returnURL)); 
    } 

Le problème est, quand je déploie une autre application-http://www.ssldemo.com/authenticationtest/members/AnotherApplication/ et http://www.ssldemo.com/authenticationtest/members/AnotherApplication/default.aspx ouvert, utilisateurs redirigés vers https://www.ssldemo.com/authenticationtest/login.aspx?ReturnUrl=%2fauthenticationtest%2fmembers%2fanotherapplication%2fdefault.aspx. mais même lorsque j'entre les informations d'identification correctes à la page de connexion, je suis de nouveau redirigé vers la même page de connexion, pas vers ReturnUrl. quand j'ai regardé dans fiddler, il a dit 'objet 302 déplacé ici.'

Merci d'avoir lu! Toute contribution sera très appréciée.

<configuration> 
<connectionStrings> 
    <add name="CompanyDatabase" connectionString="Data Source=192.168.0.2;Initial Catalog=SomeTable;User ID=Username;[email protected]" /> 
</connectionStrings> 

<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <authentication mode="Forms"> 
     <forms slidingExpiration="true" timeout="15" 
       loginUrl="https://www.ssldemo.com/authenticationtest/login.aspx" 
       defaultUrl="~/Members/Default.aspx" 
       > 
     </forms> 
    </authentication> 
    <!--Custom Membership Provider--> 
    <membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="15"> 
     <providers> 
      <clear /> 
      <add name="MyMembershipProvider" 
       type="AuthenticationTest.Web.MyMembershipProvider" 
       connectionStringName="CompanyDatabase" 
       applicationName="AuthenticationTest.Web"/> 
     </providers> 
    </membership> 
</system.web> 
<!--securing folders--> 
<location path="Members"> 
    <system.web> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
    </system.web> 
</location>  
</configuration> 

Répondre

3

L'application ci-dessous membres (l'application sous) les paramètres hérités de celui ci-dessus, il ramasse vos paramètres auth, ce qui explique pourquoi il va à cette page de connexion.

La raison pour laquelle cela ne fonctionne jamais est de savoir comment le ticket est chiffré. Les tickets ne peuvent pas être réutilisés entre les applications à moins que vous n'effectuiez une configuration supplémentaire. Cela empêche l'utilisateur de s'authentifier dans une application puis d'accéder à toutes les autres applications sur le serveur. Asp.Net le fait en créant une nouvelle clé aléatoire pour chaque application.

Vous devez d'abord ajouter enableCrossAppRedirects = true à l'élément forms. Vous devez ensuite définir MachineKey comme étant identique dans les deux applications afin que les deux applications puissent décoder les tickets d'authentification.

Cette page peut vous aider http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx