我正在使用ASP.NET Core应用程序.我正在尝试实现基于令牌的身份验证,但无法弄清楚如何在我的情况下使用新的安全系统.我经历了一些例子,但他们对我没什么帮助,他们使用的是cookie身份验证或外部身份验证(GitHub,Microsoft,Twitter).
我的场景是什么:angularjs应用程序应该请求/tokenurl传递用户名和密码.WebApi应授权用户并返回access_tokenangularjs app在以下请求中使用的内容.
我找到了很好的文章,关于在当前版本的ASP.NET中实现我所需要的 - 使用ASP.NET Web API 2,Owin和Identity进行基于令牌的身份验证.但对我来说,如何在ASP.NET Core中做同样的事情并不明显.
我的问题是:如何配置ASP.NET Core WebApi应用程序以使用基于令牌的身份验证?
我正在寻找最简单的方法来设置一个Web API服务器,该服务器使用JWT进行ASP.NET Core(即ASP.NET 5)中的身份验证.这个项目(博客文章/github)正是我正在寻找的,但它使用的是ASP.NET 4.
我只希望能够:
设置一个登录路由,可以创建一个JWT令牌并将其返回到标题中.我正在将它与现有的RESTful服务集成,它将告诉我用户名和密码是否有效.在ASP.NET 4项目中,我看到这可以通过以下路由完成https://github.com/stewartm83/Jwt-WebApi/blob/master/src/JwtWebApi/Controllers/AccountController.cs#L24- L54
拦截对需要授权的路由的传入请求,解密并验证标头中的JWT令牌,并使JWT令牌的有效负载中的用户信息可供路由访问.例如:https://github.com/stewartm83/Jwt-WebApi/blob/master/src/JwtWebApi/App_Start/AuthHandler.cs
我在ASP.NET Core中看到的所有示例都非常复杂,并且依赖于我想避免的部分或全部OAuth,IS,OpenIddict和EF.
任何人都可以指出我如何在ASP.NET Core中执行此操作或帮助我开始这个?
编辑:回答 我最终使用这个答案:https://stackoverflow.com/a/33217340/373655
我正在努力实现(或理解)JWT承载令牌认证的签名密钥.我希望有人可以帮助我或解释我的错误.
在过去的几周里,我抓了大量的教程,设法让一个自定义的Auth-Controller运行,它发出我的令牌并设法建立JWT承载认证来验证标题中的令牌.
有用.
我的问题是所有示例和教程要么生成随机或内存(发行者)签名密钥,要么使用硬编码的"密码"字符串或从某些配置文件中获取它们(在代码示例中查找"密码").
我的意思是验证设置(在StartUp.cs中):
//using hardcoded "password"
SecurityKey key = new SymmetricSecurityKey(System.Text.Encoding.ASCII.GetBytes("password"));
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = "MyIssuer",
ValidateAudience = true,
ValidAudience = "MyAudience",
ValidateLifetime = true,
IssuerSigningKey = key
}
});
Run Code Online (Sandbox Code Playgroud)
在创建令牌的AuthController中:
//using hardcoded password
var signingKey = new SymmetricSecurityKey(System.Text.Encoding.ASCII.GetBytes("password"));
SigningCredentials credentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);
var jwt = new JwtSecurityToken // Create the JWT and write it to a string
(
issuer: _jwtTokenSettings.Issuer, …Run Code Online (Sandbox Code Playgroud) 我正在开发ASP NET Core Web API,我对选择身份验证方法感到困惑.我曾经应用默认的Asp Net Identity身份验证,但最近我知道JWT.所以我几乎像在本文中所做的那样实现了身份验证:https://stormpath.com/blog/token-authentication-asp-net-core.但我无法理解这个JWT的好处.使用简单的Asp Net身份验证,我不关心令牌存储等.我只需要使用signInManager登录并使用授权方法直到注销.使用JWT,我需要考虑令牌存储,到期和其他困难.那么,这个JWT的好处是什么?如何在登录后存储此JWT令牌?此外,我应该使用这个JWT吗?就我而言,我需要对简单的WebApi进行简单的身份验证,这将由一个或多一点的用户使用.我也听说过OpenIddict,Auth0,IdentityServer,那么所有这些认证机制之间的区别是什么?
authentication jwt asp.net-identity asp.net-core asp.net-core-webapi
我有基于.NET 4.5.1构建的授权服务器并使用Microsoft.Owin.Security.OAuth版本= 3.0.0 http://prntscr.com/hvwhl4 通过machinkey保护的令牌(OAuthAuthorizationServerOptions.AccessTokenFormat是默认值).我还在.NET 4.5.1上有许多应用程序使用者(资源服务器)来验证这些令牌http://prntscr.com/hvwwdu http://prntscr.com/hvwiwr.所有这些应用程序在web.config中都具有相同的machinkey
现在我尝试构建.net core 2.0应用程序,我需要使用来自我的Auth服务器(.net 4.5.1 owin 3.0.0)的相同令牌.如何在.net core 2.0中验证和读取来自Microsoft.Owin.Security.OAuth(3.0.0)令牌的声明?
一个注意事项:我无法更改我的Auth服务器并在Auth服务器中定义DataProtector.所以我需要找到一种方法如何使用现有的机器密钥在.net核心中"解码"OWIN令牌.
更新:所以我在github上打开了问题https://github.com/aspnet/Security/issues/1592
现在它已关闭,答案是:"关闭,因为没有计划支持这一点.您可以使用第三方令牌服务器(如Identity Server)发出可与两个系统一起使用的令牌.或者,您可以为ASP编写自定义代码.NET Core用于处理OWIN/Katana风格的令牌."
我找到了一种解决方案.我在Auth服务器中使用Autofac.Integration.Owin包和OAuthAuthorizationServerMiddleware来定义运行时从哪个资源服务器获取请求,然后定义我需要返回令牌的格式.
我创建了一个新项目,选择了ASP.NET核心Web应用程序(.NET Core),然后选择了Web应用程序,个人用户帐户.
一切都很好,项目运作完美,但我想在这个项目中添加WebAPI功能,以便http://website.com/Home是MVC,而http://website.com/api/whatever是我的api,我希望他们都使用相同的身份验证数据库(因此您可以在MVC站点上注册并对API进行身份验证).
如果可以避免,我不想在解决方案中添加第二个项目.
有人发布了如何将WebAPI 4添加到现有MVC项目,但这些指令在步骤1中失败,将x添加到Global.asax,这对于ASP.Net Core MVC项目是不存在的.
请帮忙.
asp.net-core ×5
c# ×3
jwt ×2
.net-core ×1
access-token ×1
asp.net ×1
asp.net-mvc ×1
machinekey ×1
owin ×1
token ×1