忍者ブログ
Insights/Ideas/Interactions ITとSocialMediaについて書くブログ
[79] [78] [77] [76] [75] [70] [69] [68] [67] [66] [65
人気blogランキング

↑↑↑クリックお願いします!↑↑
カウンター

プロフィール
HN:
よっぱ
性別:
非公開
自己紹介:
よっぱです。
いや、別に酔っ払ってませんけど。なにか?

プロフィール
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
ブログ内検索
最新トラックバック
アクセス解析
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

タイトルを見るとたいそれたことをしてそうだが、大したことはしていないです。

要するにjavaとかPHPとかPerlとかで書くんだぜ!的なものを、ただただC#で、ASP.NETで組んだだけです。


はてな認証API - 認証
はてな認証API - ヘルプ - 認証APIを利用した認証の流れ



■まず最初に認証用APIキーを取得する

そんなわけで、早速はてな認証APIを使って認証をしたいのだが、その前に作るアプリがはてなから認証されないことにははてなによる認証サービスの利用ができない。
そんなわけで、サービスの認証を受けれるように認証用のAPIキーを取得する。

はてな認証API

詳しい方法については上記リンク先を参照したらすぐにわかるので省略。

登録が完了すると下記のような画面が表示されます。

はてな認証API認証用キー

ここで重要になってくるのが“APIキー”と“秘密鍵”。
これを用いて以降の認証が行われます。


■次はアプリを作成する

次はアプリケーションの作成。
と言っても今回ははてな認証APIの利用だけなので簡単に簡単にまとめる。

はてな認証APIの使い方を確認すると、以下のように記述されている。


アプリケーションにはてなアカウントの認証機能を搭載していきます。まず、あなたのアプリケーションから、はてな認証APIのログイン画面へリンクを行います。リンクの形式は以下のようになります。
http://auth.hatena.ne.jp/auth?api_key={api_key}&api_sig={api_sig}
api_key には先ほど取得した API キーを指定します。一方の api_sig は、このリクエストが開発者本人から送られた正しいものであることを確認するためのシグネチャです。このシグネチャは、同時に指定する他の URL パラメータの値、キー一覧にある秘密鍵の値を使って生成します。

 3. ログイン用のリンクを作成する - はてな認証APIの使い方




ここでのポイントはシグネチャを生成しなければ認証できませんよ、ってこと。
どうせ書くならもっと強調して書いてほしいもんだ。



シグネチャの生成ロジックは以下のように実装してください。

 * api_sig 以外に指定するパラメータを、パラメータ名でアルファベット順にソートする
 * ソートされたパラメータを、"パラメータ名" "そのパラメータの値" の順ですべて文字列連結する
 * 秘密鍵とこの連結されたパラメータ文字列「秘密鍵 + 連結したパラメータ文字列」の順で更に文字列連結する
 * できあがった文字列を MD5 hex に変換する



ということMD5変換を行い、さらに16進数化する必要があるわけだ。


■アプリの前にMD5 HEX変換をの処理を行う

と言うことで、どうってことない処理だが、とりあえず書いておく。

/// <summary>
/// 引数で与えられた文字列をMD5_HEX変換
/// </summary>
/// <param name="source">変換する基となる文字列</param>
/// <returns>変換後の文字列</returns>
private string ChangeMD5HEX(string source)
{
//文字列をbyte型配列に変換する
byte[] data = System.Text.Encoding.ASCII.GetBytes(source);

System.Security.Cryptography.MD5CryptoServiceProvider md5 =
new System.Security.Cryptography.MD5CryptoServiceProvider();

//ハッシュ値を計算する
byte[] bs = md5.ComputeHash(data);

//byte型配列を16進数の文字列に変換
System.Text.StringBuilder result = new System.Text.StringBuilder();
foreach (byte b in bs)
{
result.Append(b.ToString("x2"));
}
string strResult = result.ToString();
return strResult;
}



これで、引数に与えられた文字列をMD5変換し16進数化した文字列が返される。


■今度こそアプリケーションを!

これで邪魔者はいなくなった。
やっとはてなと堂々とhogehogeできるわけだ。


//アクセスに用いるキー
string strApiKey = "hogehoge";
string strSercretKey = "hogehogeSercret";

//文字列をMD5_HEX変換する
string strApiSig = ChangeMD5HEX(strSercretKey + "api_key" + strApiKey);

//はてな認証APIのリンク先をセットする
string strAuthUrl = "http://auth.hatena.ne.jp/auth?"
+ "api_key=" + strApiKey + "&api_sig=" + strApiSig;



ここでstrAuthUrlには認証用URLが入っていることになる。

ちなみにまだこのサービスを使ってないはてなユーザーが、この認証用URLにアクセスすると、こんな画面が表示される。

はてな認証確認画面

この画面で、“アカウント情報の読み取りを許可する”ボタンを押下するとサードパーティアプリによるアクセスを許可したことになる(つまりいくつかのはてなIDに関する情報をアプリを利用するために使っていいよって認めたことになる)わけだ。


■最後にはてなユーザー認証情報を取得する

この“アカウント情報の読み取りを許可する”ボタンを押下した後どうなるのか、って事だけど、この後はアプリケーションを作成している開発者が指定したURLに遷移させて、その先の処理ではてなユーザーの認証情報を取得するわけだ。

ASP.netであればPageLoadのタイミングで、QueryStringに“cert”という情報が含まれているか確認をし、その情報があった場合、はてなユーザー認証情報を取得することができる。


cert の値が取得できたら、認証APIのURL(http://auth.hatena.ne.jp/api/auth.json)に HTTP GET リクエストを投げます。このとき GET リクエストに以下の三つの値をURLパラメータとして指定します。

 * api_key
 * cert
 * api_sig

 5. 認証APIを呼び出す - はてな認証APIの使い方



このときも同様に、MD5変換とHEX化が必要になる。


//アクセスに用いるキー
string strApiKey = "hogehoge";
string strSercretKey = "hogehogeSercret";

//認証確認コードの取得
string strCert = Request.QueryString.Get("cert");

//文字列をMD5_HEX変換する
string strApiSig = ChangeMD5HEX(
strSercretKey + "api_key" + strApiKey + "cert" + strCert);

//認証リクエストURLをセット
HttpWebRequest request =
(HttpWebRequest)WebRequest.Create(
"http://auth.hatena.ne.jp/api/auth.xml?"
+ "api_key=" + strApiKey + "&cert=" + strCert + "&api_sig=" + strApiSig);

request.Method = "GET";
request.Accept = "application/xml";

//戻り値の取得
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
StringBuilder output = new StringBuilder();
output.Append(reader.ReadToEnd());

response.Close();



ここで戻り値としてHTTP GETリクエストの戻り値として得られる結果は、コードの中にある通りXMLの形式で取得されるわけだ。


・エラー時も含めた認証API のレスポンス例を以下に示します。
・認証API の URL の auth.json の箇所を auth.xml へ変更することで、結果を XML として取得することが可能です。

■JSON
 --正常時

{
"has_error": false,
"user": {
"name": "hatena",
"image_url": "http://www.hatena.ne.jp/users/ha/hatena/profile.gif",
"thumbnail_url": "http://www.hatena.ne.jp/users/ha/hatena/profile_s.gif"
}
}
 --エラー時

{
"has_error": true,
"error": {
message: "Invalid API key"
}
}

■XML
 --正常時

<?xml version="1.0" encoding="utf-8" ?>
<response>
<has_error>false</has_error>
<user>
<name>hatena</name>
<image_url>
http://www.hatena.ne.jp/users/ha/hatena/profile.gif
</image_url>
<thumbnail_url>
http://www.hatena.ne.jp/users/ha/hatena/profile_s.gif
</thumbnail_url>
</user>
</response>
 --エラー時

<?xml version="1.0" encoding="utf-8" ?>
<response>
<has_error>true</has_error>
<error>
<message>Invalid API key</message>
</error>
</response>


 認証APIのレスポンス例 - はてな認証APIの使い方




■まとめ

上記のコードではてな認証APIは利用することができます。
C#で作成しているので、VC++やVB.netでのアプリにも流用できると思います。
(コーディングの汚さについてのコメントは勘弁してください><)

PR
この記事にコメントする
name
title
color
mail
URL
comment
pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret (チェックを入れると管理人だけに表示できます)
この記事へのトラックバック
この記事にトラックバックする:
google検索
はてな注目エントリー
あわせて読みたい
あわせて読みたいブログパーツ
SiteStock


フィードメーター - よっぱ主義。 (β version)
検索ワード








Powered by Ninja Blog    template by Temp* factory    icon by MiniaureType

忍者ブログ [PR]