How to add authentication to ASP.NET hosted ICS iCalendar for outlook

独自空忆成欢 提交于 2021-02-06 11:56:15

问题


I have an ASP.NET application which dynamically creates an ICS calendar (using the DDay.iCal library) which I can subscribe to from within outlook. All is working fine, but I need to be able to secure the calendar so that only authenticated users can access it. i.e. when you add the URL to the calendar in outlook, it needs to ask for a username and password.

Remember The Milk seem to have implemented what I need, but I cannot seem to find any information on how to achieve this myself?


回答1:


The article Chris provided as a comment was the solution.

What's required is to by-pass Forms Authentication for certain requests and use Basic HTTP Authentication instead. This is then supported by Outlook (and potentially other agents, like web browsers).

This is achieved by using the MADAM Http Module.

Steps:

1> Read the article to gain a basic understanding.

2> Install the MADAM NuGet package: PM> Install-Package madam

3> Implement your own IUserSecurityAuthority:

e.g

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> Add the following to your web config:

eg:

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

Note 1:

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

...is used to identify which requests should by-pass forms authentication and use basic HTTP authentication, this is done with Regex, and you can add multiple discriminators.

Note 2:

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

....is where you configure your custom authentication provider (i.e. where you check credentials against your DB).



来源:https://stackoverflow.com/questions/17696034/how-to-add-authentication-to-asp-net-hosted-ics-icalendar-for-outlook

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!