HomeTravel ReportLocal FoodRail&BusAirportMileagemiscAbout Me
TechWiki
Updated : January 2011

DekiWiki authtokenの構成

authtokenの構成

authtokenは、以下のような値をとっており、「_」で区切られた3つの構成要素から成り立っている。

authtokenの例)


1_633626670308750000_4dc277cc9ca098442ef3fb2cea34893d

     

構成要素

(1)ユーザID

(2)西暦1年1月1日を起点とした100ナノ秒単位のタイムスタンプのシリアル値(18桁)

時刻は、authtokenが生成されたユニバーサルタイム

UNIX系の西暦1970年1月1日を基点とするには、「621355968000000000」を減算する。

(3)ハッシュ値(32桁)

ユーザID、時刻、パスワード、APIキーを使用してWindowsのGuidクラスでハッシュされる。

      

ハッシュ方法

(1)(ユーザID)_(タイムスタンプシリアル値18桁).(符号化パスワード).(APIキー)

符号化パスワード    usersテーブルuser_password列に格納されている

符号化のロジックは、Passwordの符号化 を参照

APIキー                  configテーブルのconfig_key="security/api-key"のconfig_value列の値


SELECT config_value FROM config WHERE config_key="security/api-key";

注)mindtouch.deki.startup.xmlに記述されているapi-keyではない。

(2)上記文字列をMD5でハッシュ

(3)Guidのコンストラクタに上記バイト列を使用

(4)「-」を取り除いた文字列(32桁)をハッシュ値として使用

   

ハッシュにWindowsのGuid(グローバル一意識別子)を算出するロジックを使用しており、外部で算出する場合は、C#での実装が必要となる。(VBで試算した結果同一の値が取得できた。)

確認用VBコードサンプル


 Public Class authtoken
 
    Dim md5 As New System.Security.Cryptography.MD5CryptoServiceProvider
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcButton.Click
        Dim userid As String
        Dim passwd As String
        Dim timest As String
        Dim apikey As String
        Dim tokenContext As String
        Dim pwdEncoded As String
        Dim contentToValidate As String
        Dim authtoken As String
        Dim hash As String
 
        userid = Me.inUserid.Text
        passwd = Me.inPasswd.Text
        timest = Me.inTimest.Text
        apikey = Me.inApikey.Text
 
        tokenContext = userid & "_" & timest
        pwdEncoded = MD5_HASH(userid & "-" & MD5_HASH(passwd))
        contentToValidate = tokenContext & "." & pwdEncoded & "." & apikey
        hash = New Guid(md5.ComputeHash(System.Text.Encoding.Default.GetBytes(contentToValidate))).ToString("N")
        authtoken = tokenContext & "_" & hash
        Me.outAuthtoken.Text = authtoken

        Dim utc As New DateTime(timest, DateTimeKind.Utc)
        Me.outTimest.Text = utc.ToLocalTime().ToString("yyyy/MM/dd (ddd) HH:mm:ss.fffffff")
    End Sub
 
    Private Function MD5_HASH(ByVal src_txt As String)
        Dim bytHashCode() As Byte
        Dim BytData As Byte
        Dim bytOriginalText() As Byte
        Dim MD5_STR As String = vbNullString

        bytOriginalText = System.Text.Encoding.Default.GetBytes(src_txt)
        bytHashCode = md5.ComputeHash(bytOriginalText)

        For Each BytData In bytHashCode
            MD5_STR &= Microsoft.VisualBasic.Right("0" & Hex(BytData.ToString), 2)
        Next
        Return LCase(MD5_STR)
    End Function
 
End Class

画面イメージ


authtoken.JPG



Copyright(c) 2012-2013 T.F.T. All rights reserved.