-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
OAuthでclient credentials flowが利用可能なように #2403
Comments
ユーザー取得を traQ/router/middlewares/access_control.go Line 35 in efcd171
このフローによるTokenを使ったアクセス時はユーザーの権限チェックを回避し、(ユーザー同意なしで)事前にclientとしてアクセス可能なリソースの範囲を定めた上で、その範囲内のアクセスかをチェックするのが良さそう https://datatracker.ietf.org/doc/html/rfc6749#section-1.3.4 より
日本語(https://openid-foundation-japan.github.io/rfc6749.ja.html#anchor7)
権限は つまり、
でtoken.UserIDがnilだったらその後のユーザー取得などの部分をskipして traQ/router/middlewares/access_control.go Line 35 in efcd171
のところでconsts.KeyUser が取れなかったら、client credentials flowと判断して、client roleの範囲内の操作かをチェックする もしくは明示的にユーザーに紐づいているかどうかに関するkeyをcontextに入れて、それをチェックする形でclient credentials flowであることを認識する形でも なお、少なくとも Line 56 in efcd171
のようにhandler中でuser情報をcontextから取得するようなものはclient credentials flowで許可するのは不可能 |
clinet credentials flowだと、アカウント失効されても引退者が現役時に作ったclientでリソース取得が可能になるというハックがありそう。引退時にそのユーザーが作成したOAuth clientは削除されるという運用をしていれば問題はない。 sysad系のサービスで使う場合は逆に途中で失効するとまずいけど、ユーザー失効のない@.traPアカウントで作成する方針になっていそうだから大丈夫そう 一応secretを見れていた人が引退することもあるので、年度替わりとかでsecret_idのローテーションを運用として行った方が良さそう |
client は |
traQ/router/middlewares/user_authenticate.go
Line 50 in 4f6c048
middlewareでtokenからuserIDを取っているが、client credential flowだとuuid.Nilとなる。
traQ/router/oauth2/token_endpoint.go
Line 285 in 39e29dd
traQ/router/middlewares/user_authenticate.go
Line 65 in 39e29dd
ここでuidがuuid.Nilだと500エラーが返されてしまう
client credentials flowを利用するにはここら辺を改修する必要がある
なお、client credentials flowを利用するにはconfidentialなclientである必要があるので、#2402 の対応も必要
The text was updated successfully, but these errors were encountered: