2013-07-17 8 views
5

Mam aplikację ASP.NET, która dynamicznie tworzy kalendarz ICS (using the DDay.iCal library), który mogę subskrybować z poziomu programu Outlook. Wszystko działa dobrze, ale muszę mieć możliwość zabezpieczenia kalendarza, aby dostęp mieli tylko uwierzytelnieni użytkownicy. tj. po dodaniu adresu URL do kalendarza w programie Outlook, należy poprosić o nazwę użytkownika i hasło.Jak dodać uwierzytelnianie do hostowanego przez ASP.NET ICS iCalendar dla perspektywy

Remember The Milk seem to have implemented what I need, ale nie mogę znaleźć informacji o tym, jak osiągnąć to sam?

+1

Być może zajrzyj na tę stronę http://msdn.microsoft.com/en-us/library/aa479391.aspx –

+0

Dzięki @ChrisMoutray. Skomponowałem odpowiedź na podstawie tego, co opisuje artykuł. –

Odpowiedz

7

The article Chris provided as a comment było rozwiązaniem.

Wymagane jest obejście uwierzytelniania formularzy dla niektórych żądań i używanie zamiast tego podstawowego uwierzytelniania HTTP. Jest to obsługiwane przez program Outlook (i potencjalnie inne agenty, takie jak przeglądarki internetowe).

Uzyskuje się to za pomocą MADAM Http Module.

Kroki:

1> Przeczytaj artykuł, aby uzyskać podstawową wiedzę.

2> Zainstaluj Madame Nuget pakiet: PM> Instaluj-Pakiet pani

3> zaimplementować własną IUserSecurityAuthority:

np

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> dodaj następujący do konfiguracji sieci:

np .:

<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> 

Uwaga 1:

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

... służy do identyfikacji, która żąda powinny by-pass uwierzytelniania formularzy i wykorzystać podstawowe uwierzytelnianie HTTP, odbywa się to z Regex, i można dodać wielokrotne dyskryminatory.

Uwaga 2:

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

.... gdzie można skonfigurować niestandardowe dostawcy uwierzytelniania (to znaczy gdzie sprawdzić poświadczenia przeciwko swojej DB).

Powiązane problemy