Posted at

【プログラマ英語】それ認証って意味じゃないですよ(厳密には)

More than 5 years have passed since last update.

Googleの"2段階認証"が、原文だと '2-Step Verification' って書かれてたので、ちょっと書いておきます。

(Googleの場合は公式で、2段階認証って読んじゃってるんでいいんですけど...)

日本語で認証って訳されてるものにこんなのがあります。


  • Authentication

  • Authorization

  • Verification

このなかで、いわゆる" 認証 "と呼べるのは実は

Authenticationだけです。

日本だと認証とまとめてしまっている故にOAuthをログイン代わりで使ってセキュリティホール空けてる方とかもいらっしゃいますが、

http://www.sakimura.org/2012/02/1487/ (※1)

英語圏だと逆に意味の違いゆえに'authentication'と'authorization'どっち?みたいな話が盛り上がります。

http://stackoverflow.com/questions/6556522/authentication-versus-authorization

※1

記事のセキュリティホールはFacebookとかGoogleは対応してるのでログイン代わりにする場合の対応方法を各公式ドキュメントどおりに対応してたら問題ありません。


Authentication

これがいわゆる認証ってやつです。

ユーザIDとパスワードとかを使って、本人確認をしてサービスにログインするときなどに使われます。

”お城に入るのに門番に身元を証明して正門から入城する” みたいなイメージですね。

たとえば、OPEN IDなんかは認証のためのものなので、この単語が適訳ですが、OAuthはAPIの使用認可に限るものなので、この単語を使うとニュアンスが微妙にずれる感じがします。


Authorization

これを認証と訳してしまうと、誤解を生んでしまう可能性が大きいです。

正しく訳すなら「 認可 」が適訳かと思います。

認証してサービスにログインするわけではなく、特定の期間や特定の条件のもとで情報へのアクセスを認可するときなどにこの単語が使われます。

”条件付きで特定期間だけ裏口の鍵を貸してもらう” みたいなイメージでしょうか?

例えば

ログイン処理を通さずにサービスやユーザ情報を取得したりするAPIを使わせたいと考えたとします。

でも、何もせずにAPIを使わせたのでは、それが誰で、どのくらいの権限を与えていいものなのかわかりません。


ちなみに


OAuthは'authentication'より'authorization'として扱うのが正しいとされてます。

なぜなら、APIの使用を許可するためのユーザ判定処理だからです。

(中にはOAuthが通った時にログイン処理も走ってるサービスもいるんでそれもダメなんですけどね)

ですが、認証処理としても世間一般で使われているため、先ほどの問題がOAuthのドラフトに記載されてます。

https://tools.ietf.org/html/draft-ietf-oauth-v2-31

各サービスもこれの対応を行ってます。(開発者が従ってるかは別として...)


Facebook

Signed Requestと呼ばれる機構を用意していて、API認可だけでなくログイン処理としても使用したい場合は、これを使用することになってます。

(破って罰則受けたって話は聞いたことないですけど)

最近ではAnonimous Login処理とかもリリースされましたね。


Google

OPENID+OAuth Hybrid Protocolを使うことになってます。

Open IDで認証を行い、OAuthでAPIの利用認可を行うというものです。

(AuthenticationとAuthorizationの違いを説明するときによく使います。)


Twitter

もともとOAuth1.0で特にセキュリティの問題で騒がれてるのは、OAuth2.0なのであまり対応らしいことはしてないみたいです。

ただ、現在ではOAuth2.0でもAPI利用ができるようになっており、こちらはログイン認証の処理として使ってはいけないことになってます。


日本のサービス

開発者向けドキュメントを見たところ、ほとんどのサービスで対応されてる形跡がありません。

だから、日本のサービス使いたくないんだよ (-ε-)ブーブー


Verification

これは、ユーザ側の立場からしてみれば、認証という意識で問題無いですが、正確には「 検証 」といったような意味になります。

どちらかって言うとサービス提供側がその人が今ログイン使用としてるユーザと本当に同じ人物なのか確証を持つためってニュアンスがあります。

(個人的にはログインっていうか、セキュリティチェックみたいな感じを受けます。)

派生語をみてもらうとわかりやすいかも。

単語
意味 ・ 注釈

verify
検証する。ベリファイ CD焼いたあとのベリファイがこれ。SSLのVerisignのVeriもここから

validation
確証。 フォーム入力した後とかに文字が正しくチェックするアレ

Googleは '2-Step Verification' なので、 「 2段階検証 」のほうが正しいんじゃないかなって思います。でもVerificationって単語使うなんてGoogleっぽい。

ユーザよりシステム側向いてる気がする。

Githubは '2-factor Authentication' なので、「 2要素認証 」で正しいと思います。

しっかりユーザ目線な感じ。