当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring OAuth2 JWT令牌?

师博
2023-03-14

我们希望使用SpringOAuth2JWT令牌支持。我们的架构如下:Spring只提供了一个REST接口,前端由AngularJS构建,AngularJS查询Spring REST接口。出于授权目的,我们的前端团队希望使用JWT。因此,我查看了SpringOAuth2JWT支持,但仍然不知道如何与前端讨论JWT令牌。在阅读了一些教程后,我实现了以下内容:

@Autowired
@Qualifier("defaultAuthorizationServerTokenServices")
private DefaultTokenServices tokenServices;

public static void main(String[] args) {
    SpringApplication.run(Application.class, args); 
    //TODO comments
}

@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {

    //@Autowired
    private AuthenticationManager authManager;

    @Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        return new JwtAccessTokenConverter();
    }

    @Override
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
        oauthServer.tokenKeyAccess("isAnonymous() || hasAuthority('ROLE_TRUSTED_CLIENT')")
                   .checkTokenAccess("hasAuthority('ROLE_TRUSTED_CLIENT')"); 
    }

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

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
        .withClient("my-trusted_client")
            .authorizedGrantTypes("password", "authorization_code", "refresh_token", "implicit")
            .authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
            .scopes("read", "write", "trust")
            .accessTokenValiditySeconds(60)
        .and()
        .withClient("my-client-with-registered-redirect")
            .authorizedGrantTypes("authorization_code")
            .authorities("ROLE_CLIENT")
            .scopes("read", "trust")
            .redirectUris("http://anywhere?key=value")
        .and()
        .withClient("my-client-with-secret")
            .authorizedGrantTypes("client_credentials", "password")
            .authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
            .scopes("read", "write")
            .secret("secret");
    }
}

我不确定工作流程如何。我猜:前端访问/oauth/authorizationendpoint以授权其令牌,然后Spring后端必须在每次请求资源时检查JWT令牌是否被授权访问资源?正当那么,当请求RESTendpoint时,如何让Spring检查令牌呢?我已经试过了

@RequestMapping("/projects")
@PreAuthorize("oauthClientHasRole('ROLE_CLIENT')")
public String getProjects() {
    return "";
}

但它似乎不起作用。

共有1个答案

微生嘉祥
2023-03-14

您可以查看新的spring云示例的sso示例。对我来说,这是一个最好的例子来了解它是如何做到的。

而且,一旦你了解了它,你就可以阅读这本教程,这本教程的技术性更强

 类似资料:
  • 问题内容: 我们的React Native Redux应用程序使用JWT令牌进行身份验证。有许多操作需要此类令牌,​​并且例如在应用加载时会同时分派许多令牌。 例如 双方并要求JWT。我们将令牌保存在和中。我的问题是如何处理令牌到期。 最初,我将使用中间件来处理令牌到期 } 我遇到的问题是,对于令牌和操作,都会刷新令牌,因为在分发令牌和令牌时,令牌将过期。理想情况下,我想“暂停”需要身份验证的操作

  • 我正在从事一个需要oauth2令牌才能进行通信的项目。后端给了我一个curl命令,但我不知道如何在Unity中将其转换为WWW格式,因为我以前没有使用http或json文件的经验。你能帮我取一下代币吗?谢谢下面是curl代码的样子: $curl-v-u{CLIENT_ID}:{CLIENT_SECRET}”https://api.domo.com/oauth/token?grant_type=cl

  • 我目前使用的是Web3 JavaScript API的0.2x.x版本。我通过在solidity(在REMIX IDE上)中创建智能契约来部署我的自定义ERC20令牌。我安装了元掩码,并在https://wallet.ethereum.org/上测试发送一些自定义ERC令牌到另一个我的帐户。效果很好。我想使用Web3js在我的JavaScript代码中添加“发送自定义ERC20令牌”功能。 这是我

  • 我正在尝试在web3中实现一个可靠的“购买”功能。最终,我希望有一个按钮,然后用户将打开元掩码以将固定金额(简单示例为1个以太币)发送到智能合约以换取ERC20令牌。我已经学会了如何在两个钱包之间转移代币,但现在我想更进一步,学习如何发送以太币来接收ERC20。这是我一直在使用的坚固性“购买”功能: 现在,我一直在使用这个与元amask结合的OnClick按钮来传输ERC20: 您对如何在JS中实

  • 我遇到的问题是,和操作都将刷新令牌,因为在分派时,令牌将过期。理想情况下,我希望“暂停”需要身份验证的操作,直到令牌刷新。有没有一种方法可以用中间件做到这一点?

  • 但我无法实现这种格式。我试过一些密码,但没用。