Spring Security OAuth2に問題があります。キオスクシステムには、起動中にすべてのキオスクが中央のOAuth2プロバイダで認証する必要があるキオスクシステムがあります。資格情報には2つの店舗があります.1つは実際のユーザー(例:技術者)用でもう1つはキオスク用です。キオスクのコレクションには、キオスクプロファイル情報が格納されています。これは、キオスクで使用されているすべてのデバイス(請求書受領者、現金自動預け払い機、サーマルプリンタなど)のシリアル番号です。Spring OAuth2カスタム・グラント・タイプがクラスをオートワイヤするとnullが返される
ここでは、達成しようとしているフローを示します。
- キオスクは、プロファイルが存在する場合、のOAuth2トークンを与え、すべてがプロファイルが存在しない場合は、キオスクプロファイルがキオスクに追加され
- 素晴らしいです
grant_type=kiosk
- で/のOAuth /トークンにそのプロファイル情報を送ります状態が「オフ」で、OAuth2が401権限を与えない
ここでは、キオスク認可のための新しい認可タイプを作成しました。しかし、SpringサービスであるKiosk Profile Data Mapperにアクセスする方法が必要です。だから、私のクラスでは、私は次の行を追加します。
class KioskTokenGranter extends AbstractTokenGranter {
@Autowire
KioskProfileService kioskProfile;
protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
// request parsing stuff
kioskProfile.findByAttributes(...);
}
}
上記snipperは私にkioskProfile
が存在しないことにNullPointerExceptionを与えます。 AuthorizationServerConfigurerAdapterで同じことを行うと、autowireが機能します。だから、私の質問はどのようにTokenGranter内のサービスをAutowireすることです。