ASP.NET-Webanwendung mithilfe der Formularauthentifizierung mit SqlMembership Provider unter Azure aufrüsten

Ich experimentiere mit dem Microsoft Azure-Portal, um zu sehen, wie meine Legacy-Anwendung mit dem geringsten Überschreibaufwand funktioniert. Die Authentifizierung ist ein Problem.

Background: Diese ASP.NET-Webanwendung verwendet derzeit den SqlMembership-Anbieter für Benutzer, Rollen, Profile und Personalisierung. Ja, es wurde viel über die ASP.NET-Identität, die einfache Mitgliedschaft und die universellen Anbieter gebloggt und der asp.net SqlMembership-Anbieter wird auslaufen. Wenn möglich, verwende ich jedoch lieber die ältere asp.net-Mitgliedschaft auf Azure.

Zurzeit kann ich meine VS.NET 2013-Lösung in Azure veröffentlichen, mich jedoch nicht anmelden. Sobald ich zur URL navigiere, meldet sie mich automatisch als Azure Portal-Benutzer an. Es sieht fast so aus, als ob die Windows-Authentifizierung aktiv ist und nicht Formulare. So bin ich hierher gekommen:

Ich habe die SQL-Mitgliedschaftstabellen in Sql Azure mit speziellen Azure-freundlichen Skripten für Sql Azure erstellt (hier:https: //support.microsoft.com/kb/200619).

Wenn ich meine Anwendung jedoch auf der Azure-Site oder lokal ausführe, tritt ein anderes Verhalten auf. In Azure wird ein anderer Authentifizierungsmechanismus angewendet: Zuerst werde ich aufgefordert, mich mit meiner Organisations-ID anzumelden (dies ist meine MSDN-E-Mail-Adresse). Nachdem ich mein Login für Azure eingegeben habe, werde ich automatisch bei meiner Anwendung als live.com # angemeldet. [email protected] und ich werden nicht zu default.aspx umgeleitet, sondern zu login.aspx, und keines der web.sitemap-Menüs wird außer denjenigen angezeigt, die nicht authentifizierten Benutzern zur Verfügung stehen. Ich habe auch einen zweiten Benutzer im Portal [email protected] erstellt und werde aufgefordert, mich live anzumelden, bevor ich automatisch bei der Anwendung angemeldet werde. Grundsätzlich verhält es sich so, als wäre die Windows-Authentifizierung aktiv, nicht die Formularauthentifizierung. (Klarstellung: Ich habe später herausgefunden, dass es sich bei diesem Verhalten um Azure Active Directory handelt.)

Wenn meine Anwendung dagegen lokal ausgeführt wird (im Vergleich zu .NET 2013) und meine Verbindungszeichenfolgen auf dieselbe SQL Azure-Datenquelle (die Mitgliedschaftstabellen) verweisen, melde ich mich erwartungsgemäß an: Ich gebe meinen Mitgliedsnamen / mein Mitgliedskennwort ein und sehe Auf meine Standardseite und Seiten, die mit meinen Rollen verknüpft sind, kann zugegriffen werden, der Benutzer ist in der Benutzertabelle usw. vorhanden. Offensichtlich unterscheiden sich meine lokale Laufzeitumgebung und Azure und es scheint, dass Azure die Einstellungen meines web.config-Anbieters überschreibt und seinen eigenen Mechanismus verwendet .

Meine web.config:

<authentication mode="Forms">
   <forms cookieless="UseCookies" defaultUrl="~/Default.aspx" loginUrl="~/PagesAnon/userLogin.aspx" requireSSL="false" slidingExpiration="true" timeout="45" />
</authentication>
<membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="2">
 <providers>
    <clear />
    <remove name="AspNetSqlMembershipProvider" />
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="4" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
  </providers>
</membership>
<roleManager defaultProvider="AspNetSqlRoleProvider" enabled="true" cacheRolesInCookie="true">
  <providers>
    <clear />
    <remove name="AspNetSqlRoleProvider" />
    <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</roleManager>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage