私はクッキーを使用して認証を有効にしている:なぜ私のクッキー認証がasp .netコアで動作しないのですか?
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using WebBasic.Core.Controllers;
namespace WebBasic.Core
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthentication().AddCookie(AuthController.AuthControllerAuthId);
services.AddAuthorization(options => { options.AddPolicy("IsFoo", policy => policy.RequireClaim("FooType")); });
}
public void Configure(IApplicationBuilder app, ILoggerFactory loggerfactory)
{
app.UseMvc();
app.UseAuthentication();
}
}
}
...および特許請求の範囲をテストするための一般的なビューを作成しました:
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Mvc;
namespace WebBasic.Core.Controllers
{
[Route("/api/[controller]/[action]")]
public class AuthController : Controller
{
public const string AuthControllerAuthId = "AuthControllerAuthId";
public IActionResult Test()
{
var claims = string.Join(", ", User.Claims.Select(i => i.Type));
return Ok($"{User.Identity.IsAuthenticated}: {claims}");
}
public async Task<IActionResult> AuthFixed()
{
var claims = new List<Claim> {new Claim("FooType", "FooValue", ClaimValueTypes.String)};
var userIdentity = new ClaimsIdentity(claims);
var userPrincipal = new ClaimsPrincipal(userIdentity);
await HttpContext.SignInAsync(AuthControllerAuthId, userPrincipal);
return Ok("ok");
}
public async Task<IActionResult> Logout()
{
await HttpContext.SignOutAsync(AuthControllerAuthId);
return Ok("ok");
}
}
}
私は/api/auth/authfixed/
クッキーのセットを取得する場合:
Cache-Control:no-cache
Content-Type:text/plain; charset=utf-8
Date:Tue, 05 Sep 2017 13:57:39 GMT
Expires:-1
Pragma:no-cache
Server:Kestrel
Set-Cookie:.AspNetCore.AuthControllerAuthId=...; path=/; samesite=lax; httponly
を...私がapi/auth/test
に戻ると、私は得る:
False
ie。私は認証されていませんか?認証ミドルウェアがクッキーを取得していませんか?何故なの?
私は[Authorize]
を追加する場合、私は得る:
System.InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found.
at Microsoft.AspNetCore.Authentication.AuthenticationService.<ChallengeAsync>d__11.MoveNext()
???なぜ私はそれを明示的に設定する必要がありますか?私が知っている
、私はCookieAuthenticationDefaults.AuthenticationScheme
にDefaultChallengeScene、DefaultAuthenticationSchemeとDefaultSchemeを設定することができますが、すべてのことは、実際には、文字列「クッキー」に設定されず、それはまだ動作しません。
ここで実際に何が起こっていますか?
'App.UseMvc();の前に' configure'メソッドで 'app.UseAuthentication();'を入れようとしましたか? – Ali