更改Oauth2 Spring中的响应

jav*_*fun 4 rest spring web-services spring-security oauth-2.0

您好我已在此论坛发布此问题.我也在这里发布,以便有更多回应的机会

http://forum.spring.io/forum/spring-projects/security/oauth/745627-response-of-oauth2

我需要在Oauth身份验证2的json响应中添加信息.现在我的配置返回响应,如:

{"access_token":"523dd467-e5c0-407b-95e4-ea60a403d772",
"token_type":"bearer",
"refresh_token ":"e3378c95-1ebf-419b-bf45-e734d8e94aba",
"expires_in":43199}
Run Code Online (Sandbox Code Playgroud)

但我希望有的是如下:

{"access_token":"523dd467-e5c0-407b-95e4-ea60a403d772",
"token_type":"bearer",
"refresh_token ":"e3378c95-1ebf-419b-bf45-e734d8e94aba",
"expires_in":43199, "other":"value"}
Run Code Online (Sandbox Code Playgroud)

这可能很容易吗?

其他问题是:如果我想改变expireTime我应该实现TokenStore接口是正确的吗?有没有关于它的文件?

最后一个问题是:是否有一种简单的方法可以使用json格式的凭据(用户名和密码)进行Oauth2身份验证?

jav*_*fun 6

坦克的黑马.

我只找到了如何将其他信息添加到响应中.Json格式不在他的时代(目前不是一个高优先级).我的解决方案如下:

实现TokenEnhancer并向tokenService配置添加属性:

例:

<bean id="tokenServices" class="org.springframework.security.oauth2.provider.token.DefaultTokenServices"> <property name="tokenStore" ref="tokenStore" /> <property name="supportRefreshToken" value="true" /> <property name="clientDetailsService" ref="clientDetailsService" /> <property name="tokenEnhancer" ref="tokenEnhancer"/> </bean>

和实施:

    public class MyTokenEnhancer implements TokenEnhancer {

        private List<TokenEnhancer> delegates = Collections.emptyList();

    public void setTokenEnhancers(List<TokenEnhancer> delegates) {
        this.delegates = delegates;
    }

    @Override
    public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
        DefaultOAuth2AccessToken tempResult = (DefaultOAuth2AccessToken) accessToken;

        final Map<String, Object> additionalInformation = new HashMap<String, Object>();
        final String infoValue = "This is my value"; 

        additionalInformation.put("myInfo", infoValue);
        tempResult.setAdditionalInformation(additionalInformation);

        OAuth2AccessToken result = tempResult;
        for (TokenEnhancer enhancer : delegates) {
            result = enhancer.enhance(result, authentication);
        }
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你找到一个更好/更优雅的解决方案......我愿意接受建议