[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
はてな認証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 に変換する
/// <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;
}
//アクセスに用いるキー
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;
cert の値が取得できたら、認証APIのURL(http://auth.hatena.ne.jp/api/auth.json)に HTTP GET リクエストを投げます。このとき GET リクエストに以下の三つの値をURLパラメータとして指定します。
* api_key
* cert
* api_sig
5. 認証APIを呼び出す - はてな認証APIの使い方
//アクセスに用いるキー
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();
・エラー時も含めた認証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の使い方