6

我有一个 ASP.NET 应用程序,它动态创建一个 ICS 日历(使用 DDay.iCal 库),我可以从 Outlook 中订阅它。一切正常,但我需要能够保护日历,以便只有经过身份验证的用户才能访问它。即,当您将 URL 添加到 Outlook 中的日历时,它需要询问用户名和密码。

记住 The Milk 似乎已经实现了我需要的东西,但我似乎找不到任何关于如何自己实现这一目标的信息?

4

1 回答 1

8

克里斯作为评论提供的文章就是解决方案。

需要的是绕过某些请求的表单身份验证,并改用基本 HTTP 身份验证。然后 Outlook(以及可能的其他代理,如 Web 浏览器)支持此功能。

这是通过使用MADAM Http Module实现的。

脚步:

1> 阅读文章以获得基本的了解。

2> 安装 MADAM NuGet 包:PM> Install-Package madam

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

....是您配置自定义身份验证提供程序的位置(即您检查数据库凭据的位置)。

于 2013-07-17T13:55:18.597 回答