Как добавить аутентификацию в ASP.NET размещенный ICS iCalendar для outlook

У меня есть ASP.NET приложение, которое динамически создает календарь ICS (использование День "Д".ческих библиотека), на который я могу подписаться из outlook. Все работает нормально, но мне нужно иметь возможность защитить календарь, чтобы только аутентифицированные пользователи могли получить к нему доступ. т. е. когда вы добавляете URL в календарь в outlook, он должен запросить имя пользователя и пароль.

помните, что молоко, похоже, реализовало то, что мне нужно, но я не могу найти какую-нибудь информацию о том, как добиться этого самому?

1 ответов


статью Крис предоставил в качестве комментария было решение.

что требуется, это обойти проверку подлинности форм для определенных запросов и вместо этого использовать базовую аутентификацию HTTP. Затем это поддерживается Outlook (и потенциально другими агентами, такими как веб-браузеры).

Это достигается с помощью мадам Http модуль.

действия:

1 > Прочитайте статью, чтобы получить базовое представление.

2> Установите пакет MADAM NuGet:PM > установить-пакет мадам

3 > реализовать свой собственный IUserSecurityAuthority:

Эл.г

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> Добавьте в веб-конфигурацию следующее:

например:

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

Примечание 1:

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

...используется для определения того, какие запросы должны проходить проверку подлинности форм и использовать базовую проверку подлинности HTTP, это делается с помощью Regex, и вы можете добавить множественные дискриминаторы.

примечание 2:

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

....где вы настраиваете свой пользовательский поставщик проверки подлинности (т. е. где вы проверяете учетные данные против своей БД).