We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
OAuth2.0ではclientが機密情報を安全に扱えるかどうかでpublicとconfidentialの2種類のclient_typeが定義されている。(https://datatracker.ietf.org/doc/html/rfc6749#section-2.1)
public
confidential
public clientとconfidential clientの区別はテーブル定義では含まれているが、defaultがfalse(public client扱い)になっている。このため、DB上で直接値を書き換えない限りはconfidential clientの作成が行えない
confidential clientの場合でのみ利用可能なclient credentials flow はサポートされているが(/tokenエンドポイントでgrant_type=client_credentialsとする)、これが事実上利用できなくなっている。(client credentials flowは特定のユーザーに紐づかないm2mのリソースアクセスで利用できる。)
また、tokenエンドポイントを叩くのがサーバーサイドであればconfidential clientとなるので、認可コードフローを使っている場合でもユースケースとしてconfidential_clientになっているものが多いはず。現状は恐らくconfidential_clientとpublic_clientの概念が意識されずに、運用されていそう。例えばpublic_clientの場合はclient認証は必須ではない。この仕様は実装レベルだと反映されている(public client ではclient認証を行っていない)が、利用者側からしたらclinet_secretが必ず発行されているので、client認証が必須と思われる可能性がある。public clientの場合はclient_secretを発行しない形としたいが、破壊的になるかも
後方互換性を保つのであれば以下のような形で実装を行うのが良さそう
client_type
BE側の対応が完了したらUI側の対応も必要。client typeを設定可能なように
The text was updated successfully, but these errors were encountered:
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
Line 65 in 39e29dd
client credentials flowを利用するにはここら辺の改修も必要
Sorry, something went wrong.
影響範囲が大きいのでclient credentials flowの完全対応はconfidential clientのサポートと切り分けてissueを立てた方が良さそう
kyosu-1
Successfully merging a pull request may close this issue.
概要
OAuth2.0ではclientが機密情報を安全に扱えるかどうかで
public
とconfidential
の2種類のclient_typeが定義されている。(https://datatracker.ietf.org/doc/html/rfc6749#section-2.1)public clientとconfidential clientの区別はテーブル定義では含まれているが、defaultがfalse(public client扱い)になっている。このため、DB上で直接値を書き換えない限りはconfidential clientの作成が行えない
confidential clientの場合でのみ利用可能なclient credentials flow はサポートされているが(/tokenエンドポイントでgrant_type=client_credentialsとする)、これが事実上利用できなくなっている。(client credentials flowは特定のユーザーに紐づかないm2mのリソースアクセスで利用できる。)
また、tokenエンドポイントを叩くのがサーバーサイドであればconfidential clientとなるので、認可コードフローを使っている場合でもユースケースとしてconfidential_clientになっているものが多いはず。現状は恐らくconfidential_clientとpublic_clientの概念が意識されずに、運用されていそう。例えばpublic_clientの場合はclient認証は必須ではない。この仕様は実装レベルだと反映されている(public client ではclient認証を行っていない)が、利用者側からしたらclinet_secretが必ず発行されているので、client認証が必須と思われる可能性がある。public clientの場合はclient_secretを発行しない形としたいが、破壊的になるかも
方針
後方互換性を保つのであれば以下のような形で実装を行うのが良さそう
public
とconfidential
)されたclient_type
or booleanのconfidential
をリクエストボディに含める。いずれの場合でも後方互換性の観点からdefault値をpublic_clinetとしてnot requiredとする必要がある。UIの対応
BE側の対応が完了したらUI側の対応も必要。client typeを設定可能なように
The text was updated successfully, but these errors were encountered: