Auth0の`403: User to be acted on does not match subject in bearer token.`にハマった話

 
0
このエントリーをはてなブックマークに追加
Kazuki Moriyama
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を削る

image

  • get a user apiではscopesとして複数挙げられているが、これを全部設定しなくて良い
  • というか全部設定しているとauth0が内部的にM2Mにとっては余計なsubの検証などを行い、最初のエラーにつながるっぽい

image

  • 確かにスコープはいずれかを指定していれば良いとある

スクリーンショット 2023-10-14 15.11.41

  • そもそもmanagement apiのpermissionsでは指定しないほうがよいpermissionは挙げられていないので、指定できないようになっている
  • 今回はすべてterraformで構築していたことにより、permission文字列を直指定できてしまったことが事故に繋がったっぽい
  • なのでterraformでもpermission文字列としてここから見れるものだけを指定するのが良さそう

参考

info-outline

お知らせ

K.DEVは株式会社KDOTにより運営されています。記事の内容や会社でのITに関わる一般的なご相談に専門の社員がお答えしております。ぜひお気軽にご連絡ください。