クリスがコメントとして提供した記事が解決策でした。
必要なのは、特定の要求に対してフォーム認証をバイパスし、代わりに基本 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 に対して確認する場所)。