asp.net core 1.0在webapi中获取windows身份

时间:2016-08-28 03:23:06

标签: asp.net-core asp.net-core-webapi asp.net-core-identity

我使用Visual Studio 2015创建了一个Asp.net Core 1.0(WebApi)项目。该模板是ASP.NET Core Web Application(.NET Core)\ WebApi(未选择身份验证)。

enter image description here

在ValuesController中,我想从正在调用该方法的客户端获取Windows标识。

        var verts = new[]
        {
            new Tuple<int,int,int> (-1,-1,-1 ),
            new Tuple<int,int,int> (1,-1,-1 ),
            new Tuple<int,int,int> (1,1,-1 ),
            new Tuple<int,int,int> (-1,1,-1 ),
            new Tuple<int,int,int> (-1,-1,1 ),
            new Tuple<int,int,int> (1,-1,1 ),
            new Tuple<int,int,int> (1,1,1 ),
            new Tuple<int,int,int> (-1,1,1 )
        };
        var edges = new[]
        {
            new Tuple<int,int>(0,1),
            new Tuple<int,int>(2,2),
            new Tuple<int,int>(2,3),
            new Tuple<int,int>(3,0),
            new Tuple<int,int>(4,5),
            new Tuple<int,int>(5,6),
            new Tuple<int,int>(6,7),
            new Tuple<int,int>(7,4),
            new Tuple<int,int>(0,4),
            new Tuple<int,int>(1,5),
            new Tuple<int,int>(2,6),
            new Tuple<int,int>(3,7)
        };

        foreach(var edge in edges)
        {
            var edge1 = edge.Item1;
            var edge2 = edge.Item2;

            int x, y, z;//not sure why you need these?

            foreach(var vert in new[] { verts[edge1].Item1, verts[edge1].Item2, verts[edge1].Item3 })
            {
                //[...]
            }
        }

目前在using System.Security.Claims; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Http; ... [Route("api/[controller]")] public class ValuesController : Controller { [HttpGet] [Route("GetIdentity")] public string GetIdentity() { //method1 var userId = User.GetUserId(); //method2 var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value; return userId; } } method1中没有按预期返回结果。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

没有任何身份验证,任何Web框架都无法确定用户的身份。

选择项目模板"ASP.NET Core Application (.NET Core)\WebApi&#34;并从&#34; No Authentication&#34;更改身份验证您认为合适的任何身份验证,例如&#34; Windows Authentication&#34;

然后,如果使用User属性进行注释,则可以访问控制器的[Authorize]成员。

[Authorize]
[Route("api/[controller]")]
public class ValuesController : Controller
{        
    [HttpGet]
    public string Get()
    {
        return User.Identity.Name;
    }
}

如果您想拥有单独的用户帐户,请选择MVC模板(而不是WebAPI)。然后,您可以注册个人帐户并使用其凭据进行身份验证。

如果您是从未经身份验证的模板启动的,则可以在launchSettings.json文件夹的Properties中启用Windows身份验证。

{
   "iisSettings": {
      "windowsAuthentication": true,
      "anonymousAuthentication": false,
      ...
    },
    ...
 }