AUTH – Authentication exchange
クライアントからのConnectとサーバからのConnackの間において認証の情報をやりとりするために使用されるパケットです。
チャレンジアンドレスポンス方式の認証を行うのに使われるそうです。
- クライアントから最初に送信するパケットはConnectパケットのAuthentication Dataプロパティに含まれ、最後のデータはConnackに含まれます
- ConnectパケットのAuthenticate MethodとAUTHのAuthenticate Methodは同じもので、Connectに Authentication Methodが無いとAUTHを送信することはできません
- Connack後にAUTHを使用する場合の例はReason Code が0x19(Re-authentication)に設定した場合で、ここから再認証を開始します
シーケンスの一例を示します。
非常に手間がかかるからか、ConnectとmTLSで十分だからか、実施例・実装例が見当たりませんでした(´・ω・`)
規格書に出てくる2パターン
規格書に2パターンの使用方法が書いてあるのでシーケンスにしてみます。ただし、これらはNon-normative example(規格外の参考例)です。
SCRAM challenge
MQTTにおいて、ConnectにAuthentication Dataにはusername, clientNonceを載せて送信し、途中はAUTHパケットで行うことになり、最後にServer SignatureをConnackでサーバから送られて終了になります。
https://christina04.hatenablog.com/entry/salted-challenge-response-authentication-mechanism
Kerberos challenge
認証してチケットを手に入れてそれを通行証にしてサーバにアクセスします。
実践
ただ実例は極めて少ないく、OSSで試すことはできませんでした。残念(´・ω・`)
著作権情報
Copyright © OASIS Open 2014. All Rights Reserved.
Available at: https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html
Copyright © OASIS Open 2019. All Rights Reserved.
Available at: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html