11

以前のバージョンの OAuth2 では、要素の xml 構成に追加することで、カスタム トークン グランターを追加することができました<authorization-server>

AuthorizationServerConfigurerAdapter を使用して Java Config で認可サーバーを拡張するにはどうすればよいでしょうか。既定の構成には、暗黙的なクライアント資格情報、リフレッシュ トークン、認可コード付与タイプが含まれています。

最初の試みは、@Component を使用して TokenGranter を作成することでした。

@Component("customTokenGranter")
public class CustomTokenGranter {
     //implementation
}

これは、Granter を構築するために必要な tokenServices を自動配線できないため、依存関係解決の例外につながります。

2 回目の試行では configure メソッドを使用していました

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception
{
    endpoints
        .tokenGranter(new CustomTokenGranter(endpoints.getTokenServices(),
                endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));

}

これを使用すると、デフォルトの付与タイプは登録されません。

下位の次数で 2 番目の構成も試しましたが、成功しませんでした。カスタム許可タイプを追加するには、他に何ができますか?

4

4 に答える 4

11

たとえば、次を使用して、デフォルトのものも追加する必要がありますCompositeTokenGranter

        List<TokenGranter> tokenGranters = getTokenGranters(); // implementation up to you
        tokenGranter = new CompositeTokenGranter(tokenGranters);
        endpoints.tokenGranter(tokenGranter);
于 2014-08-12T17:32:10.670 に答える
11

ここに別の方法があります。 ここからコピペ。

この例ではTokenGranter、 という名前の新しいカスタムがデフォルトCustomTokenGranterの に追加されます。の public メソッドを使用してデフォルトの を取得するため、この例が気に入っています。CompositeTokenGranterTokenGrantersAuthorizationServerEndpointsConfigurergetTokenGranter()TokenGranter

@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager);
        endpoints.tokenGranter(tokenGranter(endpoints));
    }

    private TokenGranter tokenGranter(final AuthorizationServerEndpointsConfigurer endpoints) {
        List<TokenGranter> granters = new ArrayList<TokenGranter>(Arrays.asList(endpoints.getTokenGranter()));
        granters.add(new CustomTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), "custom"));
        return new CompositeTokenGranter(granters);
    }
于 2018-05-09T15:55:59.543 に答える