Auth0の`403: User to be acted on does not match subject in bearer token.`にハマった話
Kazuki Moriyama (森山 和樹)
背景
- auth0のmanagement apiにアクセスするためのclient applicationを作成してそこからアクセスしようと思っていた
- auth0の設定・構築自体はすべてterraformで行っている
- client application自体はpythonのauth0 sdkを使用してアクセスしようとしていた
- すると以下の様なエラーが出で解決に苦労したのでメモ
403: User to be acted on does not match subject in bearer token.
エラーが出ていた現象
- 叩こうとしていたapiはget a user api
- management api tokenの取得などはすべて正常に行えていて、実際のapi callの結果として前述のレスポンスが返っていた
解決策
- 以下をすべて行う
1. clientのapp_type=non_interactiveに設定する
- terraformのauth0_clientresourceではapp_typeを指定できる
- これを
non_interactive
で指定しないといわゆるM2Mアプリケーションにならないっぽい - これがなくてもAPIは叩けるっぽいが、多分やったほうが良い
2. 余計なscopeを削る
- get a user apiではscopesとして複数挙げられているが、これを全部設定しなくて良い
- というか全部設定しているとauth0が内部的にM2Mにとっては余計なsubの検証などを行い、最初のエラーにつながるっぽい
- 確かにスコープはいずれかを指定していれば良いとある
- そもそもmanagement apiのpermissionsでは指定しないほうがよいpermissionは挙げられていないので、指定できないようになっている
- 今回はすべてterraformで構築していたことにより、permission文字列を直指定できてしまったことが事故に繋がったっぽい
- なのでterraformでもpermission文字列としてここから見れるものだけを指定するのが良さそう