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

缺少授权类型错误

周涵畅
2023-03-14

我只是在试着学OAuth。我写了一些代码来测试它。当我提交请求时,我得到{“error”:“invalid_request”,“error_description”:“missing grant type”}

邮递员的错误。

import java.util.Optional;

//import static org.assertj.core.api.Assertions.tuple;

import java.util.stream.Stream;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.springframework.security.core.userdetails.User;

//import org.omg.PortableInterceptor.ACTIVE;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
import org.springframework.stereotype.Service;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@SpringBootApplication
public class SpringAuthServiceApplication {

    @Bean
    CommandLineRunner clr(AccountRepository accountRepository){
        return args -> {
            Stream.of("name1, password1", "name2, password2", "name3, password3", "name4, password4")
            .map(tpl -> tpl.split(",") )
            .forEach(tpl -> accountRepository.save(new Account(tpl[0], tpl[1], true)));
        };


    }

    public static void main(String[] args) {
        SpringApplication.run(SpringAuthServiceApplication.class, args);
    }
}


@Configuration
@EnableAuthorizationServer
class AuthServiceConfiguration extends AuthorizationServerConfigurerAdapter{
    private final AuthenticationManager authenticationManager;

    public AuthServiceConfiguration(AuthenticationManager authenticationManager) {
        this.authenticationManager = authenticationManager;
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients
        .inMemory()
        .withClient("html5")
        .secret("password")
        .authorizedGrantTypes("password")
        .scopes("openid");

    }

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



}


@Service
class AccountUserDetailService implements UserDetailsService{

    private final AccountRepository accountRepository;

    public AccountUserDetailService(AccountRepository accountRepository) {
//      super();
        this.accountRepository = accountRepository;
    }


    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // TODO Auto-generated method stub
        return accountRepository.findByUsername (username)
                .map(account -> new User(account.getUsername(),
                        account.getPassword(), account.isActive(), account.isActive(), account.isActive(), account.isActive(),
                        AuthorityUtils.createAuthorityList("ROLE_ADMIN", "ROLE_USER") )
                        )
                .orElseThrow(() -> new UsernameNotFoundException("Couldn't fine user name " + username + "!") ) ;
    }

    /*@Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        return accountRepository.findByUsername(username)
                .map(account -> {
                    boolean active = account.isActive();
                    return new User(
                            account.getUsername(),
                            account.getPassword(),
                            active, active, active, active,
                            AuthorityUtils.createAuthorityList("ROLE_ADMIN", "ROLE_USER"));
                })
                .orElseThrow(() -> new UsernameNotFoundException(String.format("username %s not found!", username)));
    }*/

}



interface AccountRepository extends JpaRepository<Account, Long>{
    Optional<Account> findByUsername(String username); 
}



@Data 
@NoArgsConstructor
@AllArgsConstructor
@Entity
class Account{

    public Account(String username, String password, boolean active) {
        //super();
        this.username = username;
        this.password = password;
        this.active = active;
    }

    @GeneratedValue @Id
    private long id; 
    private String username, password;
    private boolean active;


}

这是我寄给邮递员的东西:

共有1个答案

叶举
2023-03-14

OAuth2在请求正文中寻找查询字符串形式的参数,也就是application/x-www-form-urlencoded

Content-type更改为application/x-www-form-urlencode,并检查x-www-form-urlencode而不是form-data

 类似资料:
  • 所以我刚刚在一个小项目中升级了SpringBoot版本,现在身份验证搞砸了。当我尝试获取身份验证令牌时,我得到一个错误: 我和邮递员玩得很开心。如果我将grant_type/pw/username从正文移到QueryParams,它就可以正常工作了。但我们不能改变这一点。那么,有没有办法找出是哪个依赖项更改导致了这种情况?我查看了升级文档(2.1-

  • 我正在按照有关如何使用Postman从Paypal获取访问令牌的说明进行操作。 我不断收到这个错误信息: “错误”:“不支持的授权类型”,“错误描述”:“授权类型为空” 这是我的邮递员设置: 网址:https://api.sandbox.paypal.com/v1/oauth2/token 授权:用户名:客户端\u id。。。密码:秘密。。。 标题:内容类型- 正文:表单-urlencoded

  • 我目前正在客户端应用程序上使用和。我用另一个请求回调()运行一个axios请求(),在第一个请求的响应中,我收到一个新的令牌。我尝试在回调的headers载体中设置这个新内标识。这不起作用:在回调()时,没有设置新的令牌,并且在头中没有设置更多的授权承载。 你知道问题出在哪里吗?

  • 我正在尝试使用JWT身份验证设置一个简单的Angularjs应用程序。 我给新注册的用户发了一封带有jwt令牌链接的邮件,以验证该邮件是否存在。链接如下所示: < code > http://127 . 0 . 0 . 1:3000/verify email/eyj 0 exaioijkv 1 qilchbgcioijiuzi 1 nij 9 . eyj 1c 2 vytmftzsi 6 injp

  • 登录时我总是得到无效的授权类型。我使用的是Laravel 7和passport 8.4。 我可以确认,我创建的client_secret没有错误运行php artisan护照:安装,但我找不到任何可能性,为什么获取访问令牌和刷新令牌不工作。 我使用自定义用户提供商,正确地设置在配置,我注意到如果我改变grant_typeclient_credentials它将只是工作,但没有刷新令牌,我想要什么。

  • 问题内容: 简单的问题。如何初始化这个结构?我想做这样的事情: 预计我会遇到错误: 当然,我可以创建一个单独的结构B并通过以下方式对其进行初始化: 但是它没有第一种方法有用。有没有初始化匿名结构的捷径? 问题答案: 该可转让规则是宽容的,这导致另一种可能性,你可以保留的原始定义匿名类型写入,同时允许该类型的短复合文字。如果您确实坚持使用该字段的匿名类型,那么我可能会写类似以下内容: 操场 输出量