読者です 読者をやめる 読者になる 読者になる

clock-up-blog

go-mi-tech

(ASP.NET MVC) UseTwitterAuthentication で AuthenticationException が出る場合の対処

ASP.NET

ASP.NET MVCSNS 連携機能について

Visual StudioASP.NET MVC 5 の新規プロジェクトを作ると、ご丁寧にも最初から Microsoft, Facebook, Twitter, Google との連携用コードが(コメントアウトされた形で)付いてくる。

App_Start/Startup.Auth.cs

//app.UseMicrosoftAccountAuthentication(
//    clientId: "",
//    clientSecret: "");

//app.UseTwitterAuthentication(
//   consumerKey: "",
//   consumerSecret: "");

//app.UseFacebookAuthentication(
//   appId: "",
//   appSecret: "");

//app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
//{
//    ClientId = "",
//    ClientSecret = ""
//});

という具合。ただ、この中の UseTwitterAuthentication をそのまま使うと AuthenticationException 例外が発生することがある。

エラー内容

英語環境の場合
f:id:kobake:20160823152329p:plain:w600

The remote certificate is invalid according to the validation procedure.
....
Exception Details: System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

日本語環境の場合
f:id:kobake:20160823152333p:plain:w600

検証プロシージャによると、リモート証明書は無効です。
....
例外の詳細: System.Security.Authentication.AuthenticationException: 検証プロシージャによると、リモート証明書は無効です。

対策

対象コード部分をコメントインして consumerKey と consumerSecret を指定するだけではダメで、

app.UseTwitterAuthentication(
    consumerKey: "xxxx",
    consumerSecret: "xxxx");


以下のように、Twitter向けの認証局情報を指定する必要がある。

using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Twitter;
....
app.UseTwitterAuthentication(new TwitterAuthenticationOptions
{
    ConsumerKey = "xxxx",
    ConsumerSecret = "xxxx",
    BackchannelCertificateValidator = new CertificateSubjectKeyIdentifierValidator(new[]
    {
        "A5EF0B11CEC04103A34A659048B21CE0572D7D47", // VeriSign Class 3 Secure Server CA - G2
        "0D445C165344C1827E1D20AB25F40163D8BE79A5", // VeriSign Class 3 Secure Server CA - G3
        "7FD365A7C2DDECBBF03009F34339FA02AF333133", // VeriSign Class 3 Public Primary Certification Authority - G5
        "39A55D933676616E73A761DFA16A7E59CDE66FAD", // Symantec Class 3 Secure Server CA - G4
        "add53f6680fe66e383cbac3e60922e3b4c412bed", // Symantec Class 3 EV SSL CA - G3
        "4eb6d578499b1ccf5f581ead56be3d9b6744a5e5", // VeriSign Class 3 Primary CA - G5
        "5168FF90AF0207753CCCD9656462A212B859723B", // DigiCert SHA2 High Assurance Server CA 
        "B13EC36903F8BF4701D498261A0802EF63642BC3" // DigiCert High Assurance EV Root CA
    })
});

とりあえずこれで解決。

告知

ASP.NET MVC 関連のブログ記事は随時以下のサイトに移行していく予定です。

});