web-dev-qa-db-ja.com

c#asp.net core Bearer error = "invalid_token"

誰かがこの問題を解決するのを手伝ってくれませんか? Postmanを使用してAPIをテストしています

私はasp.netコアに関するチュートリアルに従っています。

そして今、認証の部分にいます。

エラーの理由がよくわかりません。

チュートリアルでは、ログインがあり、トークンを返します。

ログイン用のコードです。どちらが機能していますか。トークンを返すので、これは機能しています。また、無効なログインを使用してみました。そして、それは401 Unauthorizedを返しますが、データベースにある正しいログイン認証情報を使用すると、トークンを返します

[HttpPost("login")]
public async Task<IActionResult> Login(UserForLoginDto userForLoginDto)
    {
        var userFromRepo = await _repo.Login(userForLoginDto.Username.ToLower(), userForLoginDto.Password);

        if (userFromRepo == null)
            return Unauthorized();

        var claims = new[]
        {
            new Claim(ClaimTypes.NameIdentifier, userFromRepo.Id.ToString()),
            new Claim(ClaimTypes.Name, userFromRepo.Username)
        };

        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config.GetSection("AppSettings:Token").Value));

        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature);

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(claims),
            Expires = DateTime.Now.AddDays(1),
            SigningCredentials = creds
        };

        var tokenHandler = new JwtSecurityTokenHandler();

        var token = tokenHandler.CreateToken(tokenDescriptor);

        return Ok(new {
            token = tokenHandler.WriteToken(token)
        });
}

次に、チュートリアルの次の部分は、アクセスを制限することです。コンテンツを表示するには、ユーザーが最初にログインする必要があります。

以下はコードです

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>{
                options.TokenValidationParameters = new TokenValidationParameters{
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetSection("AppSettings:Token").Value)),
                    ValidateIssuer = false
                };
            });

次に有効にします

app.UseAuthentication();

値コントローラで[Authorize]も有効にしました

[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase

これは郵便屋さんのスクリーンショットです

enter image description here

チュートリアルに従いました。ログインから受け取ったトークンを貼り付けます。しかし、それは私にエラーを与えます

WWW-Authenticate →Bearer error="invalid_token", error_description="The audience is invalid"

トークンがログインからのものである場合、エラーによりinvalid tokenが表示されるのはなぜですか?どうすれば修正できますか?しばらく探していましたが、自分では解決できません。ありがとうございました。


更新:

エラーは私がこれを忘れたためです

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>{
                options.TokenValidationParameters = new TokenValidationParameters{
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII
                        .GetBytes(Configuration.GetSection("AppSettings:Token").Value)),
                    ValidateIssuer = false,
                    ValidateAudience = false
                };
            });
10
Ramon bihon

私も同じ問題を抱えていました。設定機能での順序に注意してください。
app.usemvc ();が一番下になければなりません。このような:

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseAuthentication();
        app.UseMvc();
    }

あなたの問題が解決することを願っています。

0
B. Kuday GORUN