c# – AspNetCore 2.0声明总是空的
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – AspNetCore 2.0声明总是空的,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2535字,纯文字阅读大概需要4分钟。
内容图文
我正在努力将DotNet 4.5 MVC / WebAPI应用程序转换为AspNetCore 2.0,我在使我的Cookie身份验证再次运行时遇到了一些麻烦.当我设置cookie并尝试访问安全方法时,我无法到达那里.当我进入匿名方法并检查用户对象时,它是空的 – 没有身份验证类型,没有声明等.
我尽可能地遵循这篇文章:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?tabs=aspnetcore2x.我没有使用Identity.
我在startup.cs ConfigureServices中的代码如下:
services.AddAuthentication("ACE_AUTH")
.AddCookie("ACE_AUTH", options =>
{
options.AccessDeniedPath = "/Home/Index/";
options.LoginPath = "/Home/Index/";
});
我在Configure方法中的代码:
app.UseAuthentication();
当调用它时,Principal完全填充.我在哪里设置我的cookie:
await HttpContext.SignInAsync("ACE_AUTH", samlData.Principal);
在尝试验证用户时,我尝试的任何内容都没有导致我的声明出现.
解决方法:
以下是对我有用的东西:我学到的大部分内容都来自this microsoft doc,但正如你所说,文档似乎并没有带你到处.
在startup.cs中
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAuthentication("ACE_AUTH")
.AddCookie("ACE_AUTH", options => {
options.AccessDeniedPath = "/api/Auth/Forbidden";
options.LoginPath = "/";
options.Cookie.Expiration = new TimeSpan(7,0,0,0);
});
}
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
...
app.UseAuthentication();
}
然后在处理身份验证的控制器中:
[HttpPost()]
[Route("api/[Controller]/[Action]/")]
public async Task<JsonResult> Login([FromBody]Dictionary<string, string> loginData)
{
try
{
var loggedIn = true;
if (loggedIn)
{
var claims = new List<Claim> {
new Claim(ClaimTypes.Name, "John Doe")
};
var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);
identity.AddClaims(claims);
ClaimsPrincipal principal = new ClaimsPrincipal(identity);
await HttpContext.SignInAsync(
"ACE_AUTH",
principal,
new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddDays(7)
});
}
return new JsonResult(logRtn);
}
catch (Exception ex)
{
return new JsonResult(ex.Message);
}
}
如果您可以验证并分配loggingIn您的身份验证请求的结果,您应该能够在cookie中存储声明.然后,您可以使用以下内容在可能正在执行授权/调用值的控制器中调用该声明:
[HttpGet("[Action]", Name = "GetSomething")]
[Route("[Action]")]
public JsonResult something()
{
try
{
var loggedInUser = HttpContext.User;
var claym = loggedInUser.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Name);
if (claym != null)
{
return new JsonResult(claym.Value);
// returns "John Doe"
}
else
{
return new JsonResult("");
}
}
catch (Exception ex)
{
return new JsonResult(ex.Message);
}
}
内容总结
以上是互联网集市为您收集整理的c# – AspNetCore 2.0声明总是空的全部内容,希望文章能够帮你解决c# – AspNetCore 2.0声明总是空的所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。