【发布时间】:2019-02-11 03:36:19
【问题描述】:
根据本文档:
ASP.NET Core 2.1 Documentation
我应该能够使用 ControllerBase.User 或 HttpContext.User 访问用户身份。
根据上面的链接:
“从应用程序的 DI 服务集合中获取当前用户的身份也更具可测试性,因为可以轻松注入测试身份。”
据我了解,我应该在 Startup.cs 或控制器的构造函数中使用依赖注入来注入身份信息。
但是,经过无数小时的调查,我无法找到程序。
以下步骤描述了我的方案。我希望有人能指引我正确的方向。
1) 使用 Visual Studio 2017,使用以下选项创建一个 ASPNET.core Web API 项目:
- 类型:API
- 启用 Docker 支持:否
- 身份验证:无身份验证
- HTTPS 配置:是
2) 使用以下代码将 AuthDetailsController.cs 添加到 Controllers 文件夹:
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace CoreWebApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AuthDetailsController : Controller
{
[HttpGet]
public JsonResult Get()
{
var r = new Dictionary<String, Object>();
r.Add("User.Identities", User.Identities);
r.Add("User.Claims", User.Claims);
r.Add("HttpContext.User.Identities", HttpContext.User.Identities);
r.Add("HttpContext.User.Claims", HttpContext.User.Claims);
return Json(r );
}
}
}
3) 作为新应用程序部署到 Azure
4) 导航到https://[site_name].azurewebsites.net/api/AuthDetails
5) 没有用户身份信息,因为访问是匿名的:
{"User.Identities":[{"authenticationType":null,"isAuthenticated":false,"actor":null,"bootstrapContext":null,"claims":[],"label":null,"name":null,"nameClaimType":"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name","roleClaimType":"http://schemas.microsoft.com/ws/2008/06/identity/claims/role"}],"User.Claims":[],"HttpContext.User.Identities":[{"authenticationType":null,"isAuthenticated":false,"actor":null,"bootstrapContext":null,"claims":[],"label":null,"name":null,"nameClaimType":"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name","roleClaimType":"http://schemas.microsoft.com/ws/2008/06/identity/claims/role"}],"HttpContext.User.Claims":[]}
6) 使用以下选项启用 Azure 身份验证:
- 请求未通过身份验证时要执行的操作:使用 Azure Active Directory 登录。
- Azure 活动目录配置:快速模式
7) 再次打开https://[site_name].azurewebsites.net/api/AuthDetails
8) 你被重定向到登录页面
9) 登录成功后,ControllerBase.User 和 HttpContext.User 中都没有身份信息。响应与启用身份验证之前相同。
【问题讨论】:
-
发布您的 startup.cs 文件 - 这是需要更改的地方。您可能缺少 cookie 设置。 Cookies 是存储用户信息的地方。请参阅此处了解如何为您的应用设置 cookie:docs.microsoft.com/en-us/aspnet/core/security/authentication/…
标签: c# azure asp.net-web-api asp.net-core