6

Outlook 内からサブスクライブできるICS カレンダーを ( DDay.iCal ライブラリを使用して)動的に作成する ASP.NET アプリケーションがあります。すべて正常に動作していますが、認証されたユーザーのみがアクセスできるようにカレンダーを保護する必要があります。つまり、Outlook のカレンダーに URL を追加するときに、ユーザー名とパスワードを要求する必要があります。

ミルクは私が必要とするものを実装しているようですが、これを自分で達成する方法についての情報を見つけることができないようです?

4

1 に答える 1

8

クリスがコメントとして提供した記事が解決策でした。

必要なのは、特定の要求に対してフォーム認証をバイパスし、代わりに基本 HTTP 認証を使用することです。これは、Outlook (および Web ブラウザーなどの他のエージェント) によってサポートされます。

これは、MADAM Http モジュールを使用して実現されます。

手順:

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> Web 構成に以下を追加します。

例えば:

<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 認証を使用する必要がある要求を識別するために使用されます。これは正規表現で行われ、複数の識別子を追加できます。

注 2:

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

....カスタム認証プロバイダーを構成する場所です (つまり、資格情報を DB に対して確認する場所)。

于 2013-07-17T13:55:18.597 に答える