[13] [DFN[[[WSSE]]]] は [[HTTP]] の[[認証]]の仕組みの一種です。
2000年代の中頃、いわゆる [[Web 2.0]] 時代に、
[[Web API]] の[[認証方式]]として広く用いられました。その後の [[OAuth]]
の[[標準化]]と普及により、 [[WSSE]] は使われなくなりました。

* 代替

[32] [[OAuth]] の普及により、 [[WSSE]] が新たに使われることはなくなりました。
既存の [[Web API]] も徐々に廃止されています。

[33] [[WSSE]] でのみ提供される [[Web API]] もほとんど残っていないと思われるので、
[[クライアントライブラリー]]も [[WSSE]] に対応する必要は無さそうです。

* プロトコル

[12] [[WSSE]] の解説の多くは仕様あるいは詳細として [[WS-Security]] 関連の仕様や解説記事を参照しているが、
[[HTTP]] の認証としての [[WSSE]] を本当に説明しているものは少ない。 [[WSSE]] は歴史的に [[WS-Security]] 
の認証方式を流用して [[Web API]] に適用したものであるが、実態として [[WS-*]] / [[SOAP]]
とは関係ない。

;; [28] 当時は [[XML]] が [[Web]] の進化の方向性として信じられていたため、
[[XML]] を使ったシステム体系である [[WS-*]] との整合性が重視されていました。
(整合性といっても「似ている」程度のものですが...)
[[Webアプリケーション]]の[[バックエンド]]として [[WS-*]]
を使っている時に、 [[WS-*]] と整合した [[WSSE]] を使うと一貫したセキュリティーが実現できる、
とでも思われていたのでしょうが、現実にはほとんどの [[Webアプリケーション]]は
[[WS-*]] など使う予定すらありませんでしたし、仮にそのような事例が存在したとしても、
[[HTTP認証]]と [[WS-*]] のセキュリティー機能が連動していたか (それによる利点があったか)
は甚だ疑問であります。

;; [38] この辺の事情は当時の人々にとっては常識だったので、
明解な説明がされていない。
[[XML]] 神話(バブル)が崩壊した今では意味がまったくわからなかろう。
(XML うぇーい! WS-* うぇーい! Web 2.0 うぇーい!
的なノリとテンションみたいなものなので、
当時の人もどれだけちゃんと理解していたのかは怪しい。)

[REFS[
- [14] [CITE@en[Rewriting Microsoft web services '''['''dive into mark''']''']] ([TIME[2013-07-18 06:44:04 +09:00]] 版) <http://web.archive.org/web/20110411003501/http://diveintomark.org/archives/2003/09/08/msweb-rest>
-[8] [CITE[XML.com]]
( ([[Mark Pilgrim]] 著, [TIME[2013-07-18 05:53:18 +09:00]] 版))
<http://www.xml.com/pub/a/2003/12/17/dive.html>
-[9] [CITE[TypePad Atom API]]
( ([TIME[2013-07-18 05:57:35 +09:00]] 版))
<http://web.archive.org/web/20050810011757/http://www.sixapart.com/pronet/docs/typepad_atom_api>
]REFS]

[10] おそらく >>8 が唯一[[仕様]]と呼べるレベルのもので、 >>9 がおそらく最初の実装リファレンス。
>>9 や >>14 の方が少し緩い。

[REFS[
-[3] [CITE[Atom APIのWSSE認証について - こせきの技術日記 - 技術日記]]
( ([TIME[2013-07-18 05:12:13 +09:00]] 版))
<http://tech.g.hatena.ne.jp/koseki/20050520/AtomWSSE>
- [1] [CITE[Windows Live Writer の WSSE 認証 - 大西日記 - はてなダイアリー]] ([TIME[2009-03-31 09:29:58 +09:00]] 版) <http://d.hatena.ne.jp/onishi/20080831/1220159168>
]REFS]

[11] >>3 によれば >>8、>>9 の digest の計算方法は後に誤りと考えられるようになったが、
>>1 にあるように、未だに両方の実装が存在している。

[REFS[
- [15] [CITE[DifferentlyAbledClients - Atom Wiki]] ([TIME[2012-02-14 22:15:19 +09:00]] 版) <http://www.intertwingly.net/wiki/pie/DifferentlyAbledClients>
]REFS]

[16] [[Atom]] とセットで使われてきたけど [[IETF]] の [[AtomPub]] は既存の [[HTTP]] の認証を使えばいいということになっている。

;; [29] 結果、現実に存在するプロトコルであるにも関わらず [[WSSE]]
を明確に規定した[[仕様書]]は存在しませんでしたし、 >>11
のような問題が生じても何が正しいかを確定する音頭を取れる人(団体)もいませんでした。

* セキュリティー

[19] [[WSSE]] では[[利用者名]]と[[合言葉]]の組を使いますが、
[[クライアント]]も[[鯖]]も、この組を[[平文]] (に[[復号]]可能な形)
で保持しておく必要があります。

[20] 一般に[[利用者]]が指定した生の[[パスワード]]を[[サーバー]]で保存するのは悪手と考えられています。
[[利用者]]が指定した生の[[パスワード]]を保持することを防ぐため、
[[一方向ハッシュ関数]]を適用した結果や、
[[鯖]]側で生成した[[合言葉]]とは関係のない[[トークン]]を[[合言葉]]として使う実装もあります。

* HTTP 認証との関係

[35] 
[[challenge]] は [[HTTP認証]]の仕組みに則っていますが、
[[HTTP要求]]は独自の [[HTTPヘッダー]]だけを使っており、
[[HTTP認証]]の仕組みから外れています。

[36] 
そのため [[HTTPキャッシュ]]との関係を考慮し[[HTTP要求]]と [[HTTP応答]]に適切な
[CODE(HTTP)@en[Cache-Control:]] [[ヘッダー]]や [CODE(HTTP)@en[Vary:]]
[[ヘッダー]]を指定する必要があります。

;; [37] そうしなければ意図せず[[共有キャッシュ]]に[[蓄積]]されて[[再利用]]されてしまうかもしれません。
[[クライアント]]は[[サーバー]]が内部で[[キャッシュサーバー]]を使っているかわかりませんし、
[[サーバー]]は[[クライアント]]が[[プロキシ]]を使っているかわかりませんから、
どちらも適切な指定を加えなければなりません。

[26] どうやら [[credentials]] を [CODE(HTTP)@en[[[Authorization:]]]]
ではなく独自の[[ヘッダー]]で送っているのは、 [[CGI]] が [CODE(HTTP)@en[[[Authorization:]]]]
[[ヘッダー]]を [[CGIスクリプト]]に提供していなかったため [SRC[>>25]] のようです。

[REFS[
- [25] [CITE[New AtomAPI Implementation Release | BitWorking | Joe Gregorio]] ([TIME[2015-02-21 01:29:03 +09:00]] 版) <http://web.archive.org/web/20101213023745/http://bitworking.org/news/New_AtomAPI_Implementation_Release2>
]REFS]

* メモ

[FIG(amazon)[
Web セキュリティー
]FIG]

[2] [CITE[LWP::Authen::Wsse を使うとき,なぜ use LWP::Authen::Wsse しなくて良いのか - 理系学生日記]]
([TIME[2010-12-06 17:15:35 +09:00]] 版)
<http://d.hatena.ne.jp/kiririmode/20081004/p1>

[5] [CITE@en[各サービスにおいてWSSE認証を厳密に確認するようになりました - Hatena Developer Blog]]
( ([TIME[2013-07-18 05:18:02 +09:00]] 版))
<http://developer.hatenastaff.com/entry/20110121/1295588374>

[6] [CITE[はてなサービスにおけるWSSE認証 - Hatena Developer Center]]
( ([TIME[2013-07-18 05:18:19 +09:00]] 版))
<http://developer.hatena.ne.jp/ja/documents/auth/apis/wsse>

[4] [CITE[Section 11.1.  Data Feeds]] ([TIME[2007-06-25 13:34:05 +09:00]] 版) <http://82.157.70.109/mirrorbooks/buildingwebsites/0596102356/web2apps-CHP-11-SECT-1.html>

[PRE(HTTP code)[
Authorization: WSSE profile="cal"
X-WSSE: UsernameToken Username="cal",
        Created="2005-11-14T18:40:04-0800",
        Nonce="bf59559401b2d9e14964823a37836a76",
        PasswordDigest="WgUU6xmxOsGYqhNun9gJZ//C9ew="
]PRE]

[7] 
[PRE(HTTP code)[
Authorization: WSSE profile="cal"
]PRE]

<http://books.google.co.jp/books?id=Cd32Nk6TSoUC&pg=PA283&lpg=PA283&dq=%22authorization:+wsse%22&source=bl&ots=IyXc_uvgzW&sig=4hq1wDbUyyNJgqvSETzJwi1Rv-U&hl=ja&sa=X&ei=7HvnUbLFF8eGkgXxrIAo&ved=0CEQQ6AEwAzhG#v=onepage&q=%22authorization%3A%20wsse%22&f=false>

[17] [CITE@en[はてな各種APIでのパスワードによるWSSE認証を終了しました(開発者向け) - Hatena Developer Blog]]
([TIME[2015-02-21 01:10:49 +09:00]] 版)
<http://developer.hatenastaff.com/entry/2014/03/05/185138>

[18] [CITE@ja[WSSEとHTTPダイジェスト認証 | Livingdeadの日記 | スラッシュドット・ジャパン]]
([TIME[2015-02-21 01:12:07 +09:00]] 版)
<http://slashdot.jp/~Livingdead/journal/488927/>

[21] [CITE@ja[2.5.個人認証について|アメばた会議API]]
([TIME[2015-02-21 01:18:23 +09:00]] 版)
<http://ameblo.jp/amebabbs-api/entry-10097322688.html>

[22] [CITE@ja[WSSE認証とパスワードに関する疑問 - F.Ko-Jiの「一秒後は未来」]]
([TIME[2015-02-21 01:19:41 +09:00]] 版)
<http://blog.fkoji.com/2009/01261051.html>

[23] [CITE@ja[【続報】mixi Connect WSSE認証の終了について << mixi Developer Center (ミクシィ デベロッパーセンター)]]
([TIME[2015-01-21 14:05:14 +09:00]] 版)
<http://developer.mixi.co.jp/news/news_connect/011558.html>

[FIG(quote)[
[FIGCAPTION[
[24] [CITE@ja[AtomPub API について - livedoor Blog ヘルプセンター]]
([TIME[2015-02-21 01:22:24 +09:00]] 版)
<http://help.blogpark.jp/archives/52372407.html>
]FIGCAPTION]

> WSSE 認証は Atom Authentication で言及されている認証方法です。
> ユーザ名: ライブドアID
> パスワード: ブログ設定に表示されている、AtomPub用パスワード (ライブドアIDのパスワードではありません)

]FIG]


[27] [CITE@ja[mixi Connect WSSE認証の終了について << mixi Developer Center (ミクシィ デベロッパーセンター)]]
([TIME[2015-06-04 11:01:29 +09:00]] 版)
<http://developer.mixi.co.jp/news/news_connect/011125.html>

[FIG(quote)[
[FIGCAPTION[
[30] [CITE@en[WSSE Authentication | Adobe Developer Connection]]
( ([TIME[2016-05-16 15:10:00 +09:00]]))
<https://marketing.adobe.com/developer/ja/documentation/authentication-1/wsse-authentication-2>
]FIGCAPTION]

> While Adobe will support WSSE Authentication for some time, we encourage the use of OAuth Authentication for the longer term.

]FIG]

[31] >>30 でも冒頭で [[SOAP]] 云々と言っていますが、以後まったく [[SOAP]]
と関係ない説明が続いていますw

[34] [CITE@en[WSSE Authentication | Adobe Developer Connection]]
( ([TIME[2017-03-04 12:16:23 +09:00]]))
<https://marketing.adobe.com/developer/ja/documentation/authentication-1/wsse-authentication-2>