相关疑难解决方法(0)

如何保护ASP.NET Web API

我想使用ASP.NET Web API 构建RESTful Web服务,第三方开发人员将使用它来访问我的应用程序的数据.

我已经阅读了很多关于OAuth的内容,它似乎是标准的,但找到一个很好的样本,文档解释它是如何工作的(实际上确实有效!)似乎非常困难(特别是对于OAuth的新手).

是否有实际构建和工作的示例,并说明如何实现它?

我已经下载了很多样本​​:

  • DotNetOAuth - 从新手的角度来看,文档是没有希望的
  • Thinktecture - 无法构建它

我还看过一些博客,建议一个简单的基于令牌的方案(像这样) - 这似乎重新发明了轮子,但它确实具有概念上相当简单的优势.

似乎在SO上有很多这样的问题,但没有好的答案.

每个人在这个领域做什么?

c# asp.net-mvc oauth asp.net-web-api

389
推荐指数
5
解决办法
26万
查看次数

使用JWT在Asp.net Web API上实现身份验证

我一直在读JWT.

但从我读到的内容来看,它不是一种身份验证机制,而更像是身份验证机制中的一个关键组件.

我目前已经实现了一个有效的解决方案,但它只是试用JWT并看看它是如何工作的.但我现在所追求的是如何利用它.根据我的经验,它基本上只是一种加密机制,可以为您提供唯一的加密密钥.您还可以将信息放在此令牌内.

我希望在ASP.NET web api 2上实现它以供移动应用程序使用.

所以第1步:

  1. app =>服务器:登录(用户,密码)
  2. Server => app:登录OK,继承你的JWT
  3. app => server:获取我的个人资料(发送带请求的JWT)服务器然后解密JWT并确定请求身份.

现在这只是我对它的理解,看起来我可能走在完全错误的道路上.

是JWT的理想选择,以便您不必在每次请求时进行身份验证吗?我只是验证用户凭证一次(在初始登录时),然后服务器可以简单地使用JWT,而不必在数据库中查找用户pw和用户?

我只想使用JWT来识别用户身份.然后,在我对它们进行身份验证后,我将授权.据我所知,新的MVC和身份验证和授权存在很大的混淆.

那么我的问题归结为什么.

如何使用JWT安全有效地实施身份验证机制?我不想只是咳嗽似乎有用的东西而且没有任何关于安全隐患的想法.我确信存在一些可能设计出符合我要求的安全机制的源.

我的要求是:

  • 每次会话只需要一次性检查db for users凭据吗?由于使用bcrypt使用大量资源来比较密码.
  • 必须能够从他们的请求中识别用户.(即他们是谁,userId就足够了),最好也不用访问数据库
  • 对于处理请求的服务器端的资源,应尽可能降低开销.
  • 如果入侵者必须复制设备先前的请求,那么他应该无法访问真实用户数据.(明显)

谢谢

authentication jwt asp.net-web-api

56
推荐指数
2
解决办法
4万
查看次数

JwtSecurityToken在它应该的时候不会过期

我目前在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); 
Run Code Online (Sandbox Code Playgroud)

由于某种原因,即使将expires设置为当前时间之后的10秒,它也不会在令牌被验证之前实际抛出异常,直到大约5分钟.看到这个之后,我想也许最短的过期时间是5分钟,所以我将过期时间设置为:

DateTime.UtcNow.AddMinutes(5);
Run Code Online (Sandbox Code Playgroud)

然后它在10分钟到期,但异常消息表明过期时间设置为应该是的(用户登录后5分钟),当它显示异常中的当前时间时,它是5分钟后到期时间.因此,它似乎知道什么时候它应该过期,但它实际上并没有在过期时间后5分钟抛出异常.然后,由于令牌似乎在我将其设置为过期的任何时间添加5分钟,我将过期时间设置为:

DateTime.UtcNow.AddMinutes(-5).AddSecond(10);
Run Code Online (Sandbox Code Playgroud)

我测试了这个,到目前为止它还没有过期(超过十分钟后).有人可以解释为什么会发生这种情况以及我做错了什么?此外,如果您看到我提供的代码的任何其他内容,我将不胜感激,因为我不熟悉使用JWT和此库.

先感谢您

.net c# jwt

26
推荐指数
4
解决办法
1万
查看次数

JWT和Web API(JwtAuthForWebAPI?) - 寻找一个例子

我有一个由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);
Run Code Online (Sandbox Code Playgroud)

但我不确定最初是如何回到客户端的.我想我理解如何在客户端上处理这个问题,但是如果你还可以展示这种交互的Angular方面,那么也可以获得奖励积分.

c# access-token oauth-2.0 jwt asp.net-web-api

18
推荐指数
1
解决办法
1万
查看次数

使用带有Azure功能的JSON Web令牌(JWT)(不使用Active Directory)

我相信那里有人已经这样做了,但我还没有找到任何有关JWT的Microsoft实现的文档.Microsoft为其JWT库提供的官方文档基本上是一个空白页面,请参阅:

https://docs.microsoft.com/en-us/dotnet/framework/security/json-web-token-handler-api-reference

所以,这就是我(我相信很多其他人)想要完成的事情:

定义:用户ID =用于登录系统的用户名或电子邮件地址.

认证:

  1. 用户登录.用户填写Web表单,系统将(通过HTTPS POST)用户ID和密码(散列)发送到服务器,以验证/验证用户.

  2. 服务器验证用户.将根据数据库中保存的值检查用户标识和密码,如果无效,则会向调用方返回无效的登录响应.

  3. 创建一个JWT令牌 - ???? 没有可用的文档!

  4. 将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, …
Run Code Online (Sandbox Code Playgroud)

azure jwt azure-functions

11
推荐指数
1
解决办法
9731
查看次数

如何在aspnet.core Web API中验证JWT令牌?

我创建了自定义中间件类来验证JWT令牌。我之前app.AddMvc()在configure方法中调用此方法。***

我想知道我应该添加到配置服务中以使用JWT验证Web API的哪些内容?我在控制器类中添加了[授权]

我是否需要首先在Configure方法中调用验证JWT令牌的中间件类?或者我应该打电话给App.UseAuthentication() 我,使用以下命令:

 app.UseAuthentication();
 app.MessageHandlerMiddleware();
 app.UseMvc();
Run Code Online (Sandbox Code Playgroud)

我是.net Web API实现的新手。你能帮我吗?

c# asp.net-web-api2 .net-core asp.net-core-webapi asp.net-core-2.0

5
推荐指数
1
解决办法
3412
查看次数

ASP.NET Web API - 经过身份验证的加密JWT令牌 - 我需要OAuth吗?

我正在考虑使用经过身份验证的加密JWT令牌来验证/授权访问ASP.NET Web API应用程序.

基于我到目前为止所读到的内容,在我看来,它似乎是一种从令牌服务生成JWT令牌并通过http授权头将它们传递给Web API的选项.

我已经找到了一些关于实现JWT创建和使用的好代码示例(Badrinarayanan Lakshmiraghavan的Pro ASP.NET Web API安全性).

我试图了解我是否需要完整的OAuth实现来支持这一点,或者我是否可以简单地在auth标头中传递令牌.

假设令牌已正确加密和签名,那么在不使用OAuth的情况下保持简单是否有任何固有的安全漏洞?

在不影响安全性的情况下,尽量使事情尽可能简单.

oauth-2.0 jwt asp.net-web-api

2
推荐指数
1
解决办法
4555
查看次数