我想使用ASP.NET Web API 构建RESTful Web服务,第三方开发人员将使用它来访问我的应用程序的数据.
我已经阅读了很多关于OAuth的内容,它似乎是标准的,但找到一个很好的样本,文档解释它是如何工作的(实际上确实有效!)似乎非常困难(特别是对于OAuth的新手).
是否有实际构建和工作的示例,并说明如何实现它?
我已经下载了很多样本:
我还看过一些博客,建议一个简单的基于令牌的方案(像这样) - 这似乎重新发明了轮子,但它确实具有概念上相当简单的优势.
似乎在SO上有很多这样的问题,但没有好的答案.
每个人在这个领域做什么?
我一直在读JWT.
但从我读到的内容来看,它不是一种身份验证机制,而更像是身份验证机制中的一个关键组件.
我目前已经实现了一个有效的解决方案,但它只是试用JWT并看看它是如何工作的.但我现在所追求的是如何利用它.根据我的经验,它基本上只是一种加密机制,可以为您提供唯一的加密密钥.您还可以将信息放在此令牌内.
我希望在ASP.NET web api 2上实现它以供移动应用程序使用.
所以第1步:
现在这只是我对它的理解,看起来我可能走在完全错误的道路上.
是JWT的理想选择,以便您不必在每次请求时进行身份验证吗?我只是验证用户凭证一次(在初始登录时),然后服务器可以简单地使用JWT,而不必在数据库中查找用户pw和用户?
我只想使用JWT来识别用户身份.然后,在我对它们进行身份验证后,我将授权.据我所知,新的MVC和身份验证和授权存在很大的混淆.
那么我的问题归结为什么.
如何使用JWT安全有效地实施身份验证机制?我不想只是咳嗽似乎有用的东西而且没有任何关于安全隐患的想法.我确信存在一些可能设计出符合我要求的安全机制的源.
我的要求是:
谢谢
我目前在System.IdentityModels.Tokens命名空间中使用JwtSecurityToken类.我使用以下方法创建令牌:
DateTime expires = DateTime.UtcNow.AddSeconds(10);
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
var genericIdentity = new System.Security.Principal.GenericIdentity(username, "TokenAuth");
ClaimsIdentity identity = new ClaimsIdentity(claims);
string secret = ConfigurationManager.AppSettings["jwtSecret"].ToString();
var securityKey = new     InMemorySymmetricSecurityKey(Encoding.Default.GetBytes(secret));
var signingCreds = new SigningCredentials(securityKey,     SecurityAlgorithms.HmacSha256Signature, SecurityAlgorithms.HmacSha256Signature);
var securityToken = handler.CreateToken(
    issuer: issuer,
    audience: ConfigurationManager.AppSettings["UiUrl"].ToString(),
    signingCredentials: signingCreds,
    subject: identity,
    expires: expires,
    notBefore: DateTime.UtcNow
);
return handler.WriteToken(securityToken); 
由于某种原因,即使将expires设置为当前时间之后的10秒,它也不会在令牌被验证之前实际抛出异常,直到大约5分钟.看到这个之后,我想也许最短的过期时间是5分钟,所以我将过期时间设置为:
DateTime.UtcNow.AddMinutes(5);
然后它在10分钟到期,但异常消息表明过期时间设置为应该是的(用户登录后5分钟),当它显示异常中的当前时间时,它是5分钟后到期时间.因此,它似乎知道什么时候它应该过期,但它实际上并没有在过期时间后5分钟抛出异常.然后,由于令牌似乎在我将其设置为过期的任何时间添加5分钟,我将过期时间设置为:
DateTime.UtcNow.AddMinutes(-5).AddSecond(10);
我测试了这个,到目前为止它还没有过期(超过十分钟后).有人可以解释为什么会发生这种情况以及我做错了什么?此外,如果您看到我提供的代码的任何其他内容,我将不胜感激,因为我不熟悉使用JWT和此库.
先感谢您
我有一个由Angular提供的Web API项目,我希望使用JWT令牌来保护它.我已经进行了用户/通过验证,所以我认为我只需要实现JWT部分.
我相信我已经确定了JwtAuthForWebAPI所以使用它的一个例子会很棒.
我假设任何未使用[Authorize]修饰的方法都会像往常一样运行,并且如果客户端传递的令牌不匹配,则[Authorize]修饰的任何方法都将为401.
我还不知道如何在初始身份验证时将令牌发送回客户端.
我正在尝试使用魔术字符串开始,所以我有这个代码:
RegisterRoutes(GlobalConfiguration.Configuration.Routes);
var builder = new SecurityTokenBuilder();
var jwtHandler = new JwtAuthenticationMessageHandler
{
    AllowedAudience = "http://xxxx.com",
    Issuer = "corp",
    SigningToken = builder.CreateFromKey(Convert.ToBase64String(new byte[]{4,2,2,6}))
};
GlobalConfiguration.Configuration.MessageHandlers.Add(jwtHandler);
但我不确定最初是如何回到客户端的.我想我理解如何在客户端上处理这个问题,但是如果你还可以展示这种交互的Angular方面,那么也可以获得奖励积分.
我相信那里有人已经这样做了,但我还没有找到任何有关JWT的Microsoft实现的文档.Microsoft为其JWT库提供的官方文档基本上是一个空白页面,请参阅:
https://docs.microsoft.com/en-us/dotnet/framework/security/json-web-token-handler-api-reference
所以,这就是我(我相信很多其他人)想要完成的事情:
定义:用户ID =用于登录系统的用户名或电子邮件地址.
认证:
用户登录.用户填写Web表单,系统将(通过HTTPS POST)用户ID和密码(散列)发送到服务器,以验证/验证用户.
服务器验证用户.将根据数据库中保存的值检查用户标识和密码,如果无效,则会向调用方返回无效的登录响应.
创建一个JWT令牌 - ???? 没有可用的文档!
将JWT令牌返回给调用者 - ???? - 我假设在标题中?通过JSON,不确定 - 再次 - 没有文档.
鉴于下面的代码,任何人都可以提供步骤3和4的代码示例吗?
  [FunctionName( "authenticate" )]
  public static async Task<HttpResponseMessage> Run( [HttpTrigger( AuthorizationLevel.Anonymous, "get", "post", Route = null )]HttpRequestMessage req, TraceWriter log )
  {
   // Step 1 - Get user ID and password from POST data
   /*
   * Step 2 - Verify user ID and password (compare against DB values)
   * If user ID or password is not valid, …我创建了自定义中间件类来验证JWT令牌。我之前app.AddMvc()在configure方法中调用此方法。***
我想知道我应该添加到配置服务中以使用JWT验证Web API的哪些内容?我在控制器类中添加了[授权]
我是否需要首先在Configure方法中调用验证JWT令牌的中间件类?或者我应该打电话给App.UseAuthentication()
我,使用以下命令:
 app.UseAuthentication();
 app.MessageHandlerMiddleware();
 app.UseMvc();
我是.net Web API实现的新手。你能帮我吗?
c# asp.net-web-api2 .net-core asp.net-core-webapi asp.net-core-2.0
我正在考虑使用经过身份验证的加密JWT令牌来验证/授权访问ASP.NET Web API应用程序.
基于我到目前为止所读到的内容,在我看来,它似乎是一种从令牌服务生成JWT令牌并通过http授权头将它们传递给Web API的选项.
我已经找到了一些关于实现JWT创建和使用的好代码示例(Badrinarayanan Lakshmiraghavan的Pro ASP.NET Web API安全性).
我试图了解我是否需要完整的OAuth实现来支持这一点,或者我是否可以简单地在auth标头中传递令牌.
假设令牌已正确加密和签名,那么在不使用OAuth的情况下保持简单是否有任何固有的安全漏洞?
在不影响安全性的情况下,尽量使事情尽可能简单.
jwt ×5
c# ×4
oauth-2.0 ×2
.net ×1
.net-core ×1
access-token ×1
asp.net-mvc ×1
azure ×1
oauth ×1