2013-07-17 8 views
5

Ich habe eine ASP.NET-Anwendung, die dynamisch erstellt einen ICS-Kalender (using the DDay.iCal library), die ich aus Outlook abonnieren kann. Alles funktioniert gut, aber ich muss den Kalender sichern können, damit nur authentifizierte Benutzer darauf zugreifen können. Wenn Sie die URL zum Outlook-Kalender hinzufügen, müssen Sie nach einem Benutzernamen und einem Passwort fragen.Hinzufügen von Authentifizierung zu ASP.NET Hosted ICS iCalendar für Outlook

Remember The Milk seem to have implemented what I need, aber ich finde keine Informationen, wie ich das selbst erreichen kann?

+1

Vielleicht in diese http://msdn.microsoft.com/en-us/library/aa479391.aspx –

+0

Dank @ChrisMoutray. Ich habe eine Antwort basierend auf dem, was der Artikel beschreibt, komponiert. –

Antwort

7

The article Chris provided as a comment war die Lösung.

Erforderlich ist, die Formularauthentifizierung für bestimmte Anforderungen zu umgehen und stattdessen die einfache HTTP-Authentifizierung zu verwenden. Dies wird dann von Outlook (und möglicherweise anderen Agenten wie Webbrowsern) unterstützt.

Dies wird mit der MADAM Http Module erreicht.

Schritte:

1> Lesen Sie den Artikel ein grundlegendes Verständnis zu gewinnen.

2> Installieren Sie das MADAM NuGet Paket: PM> Install-Paket Frau

3> Implementieren Sie Ihre eigene IUserSecurityAuthority:

zB

public class MadamUserSecurityAuthority : IUserSecurityAuthority 
{ 
    public MadamUserSecurityAuthority() 
    { 

    } 

    //This constructor is required 
    public MadamUserSecurityAuthority(IDictionary options) 
    { 

    } 

    public object Authenticate(string userName, object password, PasswordFormat format, IDictionary options, string authenticationType) 
    { 
     if (_yourAuthenticationService.isValid(userName, password.ToString())) 
      return true; 

     //Returning null means the authentication failed 
     return null; 
    } 

    public string RealmName 
    { 
     get { return "MADAM"; } 
    } 
} 

4> Fügen Sie den folgenden zu Ihrer Webkonfiguration:

zB:

<sectionGroup name="madam"> 
    <section name="userSecurityAuthority" type="System.Configuration.SingleTagSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 
    <section name="formsAuthenticationDisposition" type="Madam.FormsAuthenticationDispositionSectionHandler, Madam"/> 
</sectionGroup> 

<madam> 
    <formsAuthenticationDisposition> 
     <discriminators all="true"> 
      <discriminator inputExpression="Request.Url" pattern="Calendar\.aspx" type="Madam.RegexDiscriminator"/> 
     </discriminators> 
    </formsAuthenticationDisposition> 
    <userSecurityAuthority realm="MADAM" provider="YourAppAssembly.MadamUserSecurityAuthority, YourAppAssembly"/> 
</madam> 

<httpModules> 
    <add name="FormsAuthenticationDisposition" type="Madam.FormsAuthenticationDispositionModule, Madam"/> 
    <add name="AuthenticationModule" type="Madam.BasicAuthenticationModule, Madam"/>  
</httpModules> 

Anmerkung 1:

<discriminator inputExpression="Request.Url" pattern="Calendar\.aspx" type="Madam.RegexDiscriminator"/> 

... wird verwendet, um festzustellen, welche Bypass-Formularauthentifizierung und verwenden grundlegende HTTP-Authentifizierung anfordert, sollte dies mit Regex getan, und Sie können hinzufügen mehrere Diskriminatoren.

Anmerkung 2:

<userSecurityAuthority realm="MADAM" provider="YourAppAssembly.MadamUserSecurityAuthority, YourAppAssembly"/> 

.... ist, wo Sie Ihre benutzerdefinierten Authentifizierungsanbieter konfigurieren (das heißt, wenn Sie die Anmeldeinformationen gegen Ihre DB überprüfen).

Verwandte Themen