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

Spring Boot-无效访问令牌错误

法兴德
2023-03-14

我目前正在开发一个简单的Spring Boot应用程序,在该应用程序中,我传递client_id和secret以获得访问令牌,从而获得一个刷新和访问令牌。

但是,当我尝试使用该令牌访问资源(我的REST API)时(具有以下URL:curl-h“authorization:Bearer ead8ba5d-88ad-4531-a821-db08bf25e888”localhost:8081/my-end-point“),它对我不起作用,并给出以下错误-

{“error”:“invalid_token”,“error_description”:“无效访问令牌:EAD8BA5D-4531-DB08BF2FE888”}

这就是我的终点-

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.security.Principal;

@RestController
@RequestMapping(path = "/my-end-point")
public class PrincipalResource {

    @RequestMapping(method = RequestMethod.POST)
    public Principal oauth(Principal principal) {
        /*
         * Translate the incoming request, which has an access token
         * Spring security takes the incoming request and injects the Java Security Principal
         * The converter inside Spring Security will handle the to json method which the Spring Security
         * Oauth client will know how to read
         *
         * The @EnableResourceServer on the application entry point is what makes all this magic happen.
         * If there is an incoming request token it will check the token validity and handle it accordingly
         *
         *
         */


        return principal;
    }
} `

共有1个答案

梅耘豪
2023-03-14

确保在您的AuthServerOAuth2ConfigSecurity.AllowForMauthenticationForClients().CheckTokenAccess(“PermitAll()”);

@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {     
    security.allowFormAuthenticationForClients().checkTokenAccess("permitAll()");       
}

并通过向URL:localhost:yourport/oauth/token的服务器发出POST请求来开始生成一些令牌

例如:

http://localhost:8085/oauth/token?client_secret=secret&client_id=web&grant_type=password&username=kalaiselvan&password=kalaiselvan
 {
   "access_token": "8b816685-b7da-4996-a3e2-ff18b4538a2b",
   "token_type": "bearer",
   "refresh_token": "f458c09b-f739-4488-be0f-2b0e3c5a62d1",
   "expires_in": 637,
   "scope": "read"
 }
 类似资料:
  • 我得到的令牌是: http://localhost:8080/servicesmem/oauth/token?username=myuser&password=mypassword&grant_type=password&scope=read,write,trust 我得到: 我得到: 我使用头:Authorization Bearer ACCESS_TOKEN,但我得到了同样的错误。我错过了什么

  • 好的,我已经花了两天的时间来解决这个错误,并找到了一个解决方案。在我的搜索中,我没有找到一个单一的答案来解决我所面临的问题(相反,我找到了多个最终指向解决方案的答案)。因此,我尝试向您解释“访问令牌验证失败。无效访问群体”错误的解决方案: TLDR: 检查“https://graph.Microsoft.com”在https://jwt.ms/上与MSAL进行身份验证时收到的访问令牌中是否作为AU

  • 定义的新集成密钥9xxx7e null 但仍然得到401的回应内容:

  • 当我尝试使用以下命令生成访问令牌时: 它抛出的错误为: {“error_description”:“缺少必需的参数,包括无效的参数值,参数多次。:无法检索访问令牌:appId或重定向uri与授权码不匹配或授权码过期”,“error”:“invalid_request”}。 你能在这个问题上指导我吗?

  • OAuth2ClientOptions credentials=new OAuth2ClientOptions().setClientId(clientId).setClientSecret(clientSecret).setFlow(Oauth2FlowType.client).setTokenPath(“oauth/token URL”); 错误:访问令牌错误;io/vertx/ext/jwt

  • 在错误=我正在获取“消息”的上下文中需要帮助:“Access token validation Failure.Invalid Pavior.”, 我正在使用OAuth中的授权代码授予类型。我已经使用Azure广告策略将自定义声明映射到应用程序。因此,如果用户Scope=appid/.default,那么我将在令牌中获得一个自定义声明,并在Azure AD上对应用程序具有API权限,如user.r