lycheejam's tech log

チラ裏のメモ帳 | プログラミングは苦手、インフラが得意なつもり。

ASP.NET MVCでTwitter連携の認証

概要

ASP.NET MVCのデフォルト機能として存在するOAuth/OpenIDのログイン(?)を試してみる。
※用語(日本語)あってます?
いわゆるTwitter連携と言うやつ?

個人認証付きプロジェクトの作成

通常通りプロジェクトの追加を行う
MVC選択後、認証の変更を選択

f:id:HM_Atlas:20171224232346p:plain

デフォで「個別のユーザーアカウント」が選択されているので特に問題ないと思います。

TwitterAPIキーの取得

https://apps.twitter.com/apps.twitter.com
ツイッター開発者サイトにアクセス後アプリを登録してAPIキーを取得

参考

アプリケーション名、概要と URL を入力します。ローカルでデバッグする場合の URL は、Twitter の場合は http://localhost:XXXX/ 形式は使えないため、 http://127.0.0.1:XXXX/ 形式のローカル ループバック IP アドレスを使用します。Callback URL には、ログイン後に表示したい URL を入力します。*1

注意書きがある通りローカルで開発している場合は127.0.0.2で登録しましょう。

Twitter連携を行う

[プロジェクト]/App_Start/StartUp.Auth.csに先ほど取得したAPIキーを追記
f:id:HM_Atlas:20171224233717p:plain
デフォのコードだとおそらくこんな感じ
赤括弧部分を編集

//app.UseTwitterAuthentication(
//	consumerKey: "",
//	consumerSecret: "");
//コメント解除後APIキーとAPIシークレットを追加
app.UseTwitterAuthentication(
	consumerKey: "XXXX",
	consumerSecret: "XXXX");

とりあえず実行してみる

f:id:HM_Atlas:20171224234205p:plainf:id:HM_Atlas:20171224234213p:plain

なんでいつもいつもすんなりいかないんだよwwww
とりあえずエラーが証明書がどうとか言ってる。
証明書ってよくあるあれでしょ?あれって感じだけど
とりあえずエラーコピペでググる

発見、記事自体はVBなので注意
さらにソースとしてすたっくおーばーふろーがあったのでGoogle翻訳で読んでみる

なにやら証明書チェックを追加しろとのこと

Microsoft アカウントに属するバック チャネル通信で使用されるエンドポイントの検証に使用する、固定された証明書検証コントロールを取得または設定します。*2

証明書の正当性が検証できないから証明の何かを
追加しないといけませんよ見たいなノリですよね?

学生時代にチラッと実習で使った記憶が微かにってレベルです。

とりあえずコピペを下記の通り行ったが失敗

//検証用に証明書の追加※失敗例
app.UseTwitterAuthentication(
	consumerKey: "XXXX",
	consumerSecret: "XXXX"
        //参照設定:Microsoft.Owin.Securityを追加すること
	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
		"5168FF90AF0207753CCCD9656462A212B859723B", //DigiCert SHA2 High Assurance Server CA 
		"B13EC36903F8BF4701D498261A0802EF63642BC3" //DigiCert High Assurance EV Root CA
	})
);

もう追記じゃなくてソースが違います。ありがとうございました。

//デフォ
app.UseTwitterAuthentication()
//スタックオーバーフローのソース
app.UseTwitterAuthentication(new TwitterAuthenticationOptions{})

コピペ人間ここに敗れる
オプションも設定するぜみたいな感じ?

//検証用に証明書の追加
app.UseTwitterAuthentication(new TwitterAuthenticationOptions
{
        //識別子?が「:」から「=」になっているので注意
	ConsumerKey = "XXXX",
	ConsumerSecret = "XXXX"
        //参照設定:Microsoft.Owin.Securityを追加すること
	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
		"5168FF90AF0207753CCCD9656462A212B859723B", //DigiCert SHA2 High Assurance Server CA 
		"B13EC36903F8BF4701D498261A0802EF63642BC3" //DigiCert High Assurance EV Root CA
	})
});

再チャレンジ

f:id:HM_Atlas:20171225001244p:plainf:id:HM_Atlas:20171225001250p:plain

上手くいきました。

雑感

すっきりさっぱりツイートの投稿まで行きたかった。
時間がうまく使えてない感が半端ないです。
そしてモンスター2本目をぶち込んだので明日仕事なのに寝れる気がしません。