Pab*_*blo 5 c# azure asp.net-web-api asp.net-core
根据此文档:
我应该能够使用ControllerBase.User或HttpContext.Use r 访问用户身份。
按照上面的链接:
“从应用程序的DI服务集合中获取当前用户的身份也更具可测试性,因为可以轻松注入测试身份。”
据我了解,我应该在Startup.cs或控制器的构造函数中使用依赖项注入来注入身份信息。
但是,经过无休止的调查,我找不到程序。
以下步骤描述了我的情况。我希望有人可以指引我正确的方向。
1)使用Visual Studio 2017,使用以下选项创建ASPNET.core Web API项目:
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 );
}
}
}
Run Code Online (Sandbox Code Playgroud)
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":[]}
Run Code Online (Sandbox Code Playgroud)
6)使用以下选项启用Azure身份验证:
7)再次打开https:// [site_name] .azurewebsites.net / api / AuthDetails
8)您将被重定向到登录页面
9)成功登录后,ControllerBase.User和HttpContext.User中都没有身份信息。响应与启用身份验证之前相同。
我做到了 !!!
该文档为我指明了正确的方向。
这些是重现我的场景的步骤:
1) 使用 Visual Studio 2017,使用以下选项创建 ASPNET.core Web API 项目:
2)将AuthDetailsController.cs添加到Controllers文件夹中,代码如下:
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
namespace CoreWebApiTest2.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AuthDetailsController : ControllerBase
{
// GET: api/AuthDetails
[HttpGet]
public Dictionary<string,string> Get()
{
return new Dictionary<string, string> { {"X-MS-CLIENT-PRINCIPAL-NAME", Request.Headers["X-MS-CLIENT-PRINCIPAL-NAME"] },
{"X-MS-CLIENT-PRINCIPAL-ID", Request.Headers["X-MS-CLIENT-PRINCIPAL-ID"] } };
}
}
}
Run Code Online (Sandbox Code Playgroud)
3)作为新应用程序部署到Azure
4) 使用以下选项启用 Azure 身份验证:
5) 打开https://[site_name].azurewebsites.net/api/AuthDetails
6) 您将被重定向到登录页面
7) 登录成功后,您将得到响应:
{"X-MS-CLIENT-PRINCIPAL-NAME":"your_user@your_domain","X-MS-CLIENT-PRINCIPAL-ID":"your_user_ad_guid"}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3509 次 |
最近记录: |