誰かがこの問題を解決するのを手伝ってくれませんか? 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
これは郵便屋さんのスクリーンショットです
チュートリアルに従いました。ログインから受け取ったトークンを貼り付けます。しかし、それは私にエラーを与えます
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
};
});
私も同じ問題を抱えていました。設定機能での順序に注意してください。app.usemvc ();
が一番下になければなりません。このような:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseAuthentication();
app.UseMvc();
}
あなたの問題が解決することを願っています。