我确信已经有人这样做了,但是我还没有找到任何关于Microsoft JWT实现的留档。Microsoft为其JWT库提供的官方留档基本上是一个空页面,请参阅:
https://docs.microsoft.com/en-us/dotnet/framework/security/json-web-token-handler-api-reference
因此,以下是我(我相信还有许多其他人)想要实现的目标:
定义:用户ID=用于登录系统的用户名或电子邮件地址。
身份验证:
>
用户登录。用户填写Web表单,系统将(通过HTTPS POST)用户ID和密码(散列)发送到服务器,以验证/验证用户。
服务器对用户进行身份验证。根据数据库中保存的值检查用户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, return Invalid User response
*/
// Step 3 - Create JWT token - ????
// Step 4 - Return JWT token - ????
}
授权:
假设用户已通过身份验证,现在拥有JWT令牌(我假设JWT令牌保存在用户会话中;如果有人想提供更多信息,请提供):
>
JWT令牌已验证-????没有可用的文档!
如果JWT令牌无效,则函数返回BadRequest响应。
如果JWT令牌有效,函数将使用传递给它的数据进行处理并发出响应。
鉴于下面的代码,有人能提供步骤1和2的代码示例吗?
[FunctionName( "do_something" )]
public static async Task<HttpResponseMessage> Run( [HttpTrigger( AuthorizationLevel.Anonymous, "get", "post", Route = null )]HttpRequestMessage req, TraceWriter log )
{
// Step 1 - Get JWT token (from POST data or headers?)
// Step 2 - Validate the JWT token - ???
// Step 3 - If JWT token is not valid, return BadRequest response
// Step 4 - Process the request and return data as JSON
}
任何和所有信息都将真正帮助我们(我)理解如何将JWT与Azure(匿名)函数结合使用,以构建“安全”的REST API。
提前谢谢。
你所描述的是你应该通过做一点研究就能自己做的事情。为了解决你的具体问题:
创建JWT令牌-????没有可用的文档!
Bruce给你的链接为如何创建JWT提供了一个很好的例子:https://www.codeproject.com/Tips/1208535/Create-And-Consume-JWT-Tokens-in-csharp
将JWT令牌返回给调用者-??-我猜是头球?通过JSON,不确定——同样——没有文档。
没有文档,因为你基本上是在发明自己的协议。这意味着您如何做到这一点完全取决于您和您的应用程序需求。如果是登录操作,那么将其作为HTTP响应负载的一部分返回可能是有意义的。只要确保您使用的是HTTPS,这样令牌就可以通过网络得到保护。
向Azure函数发出POST请求以执行某些操作(例如获取用户出生日期)。上面获得的JWT令牌被加载(从POST数据或头-这有关系吗?)以及函数所需的任何其他数据。
如何发送代币同样完全取决于您。大多数平台使用HTTP授权
请求头,但如果不想,则不必这样做。
JWT令牌已验证-????没有可用的文档!
使用JwtSecurityTokenHandler
的ValidateToken
方法(有关如何获取JwtSecurityTokenHandler
,请参阅上一个链接)。这里的文档:https://msdn.microsoft.com/en-us/library/dn451155(v=vs.114)。aspx。
试试这个:https://liftcodeplay.com/2017/11/25/validating-auth0-jwt-tokens-in-azure-functions-aka-how-to-use-auth0-with-azure-functions/我成功地使用了这个指南。由于nuget版本,它花了一段时间。
正确遵循该指南并使用以下nuget版本
IdentityModel.Protocols (2.1.4)
IdentityModel.Protocols.OpenIdConenct (2.1.4)
IdentityModel.Tokens.Jwt (5.1.4)
哦,还有,指南告诉你把你的读者写成你的api链接,不要。你会得到未经授权的错误。只需写下api的名称,例如myapi
如果你发现了系统的错误。http。运行函数时,如果未加载格式,请尝试重新安装NET。Sdk。函数并忽略有关AspNet的警告。WebApi。正在使用恢复的客户端。NETFramework。然后重新启动visual studio。
任何和所有信息都将真正帮助我们(我)理解如何将JWT与Azure(匿名)函数结合使用,以构建“安全”的REST API。
根据我的理解,您可以使用azure函数代码中的相关库来生成/验证JWT令牌。这里有一些教程,您可以参考:
在C#中创建和使用JWT代币。
Jwt。Net的JWT(JSON Web令牌)实现。网
Asp的JWT身份验证。Net Web Api
此外,您可以利用应用服务身份验证/授权来配置功能应用级别身份验证/授权。您可以转到您的功能应用设置,单击“网络”
您可以创建一个HttpTrigger函数,匿名访问用户日志,如果用户存在,则返回JWT令牌。对于受保护的REST API,您可以遵循以下代码示例:
if(System.Security.Claims.ClaimsPrincipal.Current.Identity.IsAuthenticated)
{
//TODO: retrieve the username claim
return req.CreateResponse(HttpStatusCode.OK,(System.Security.Claims.ClaimsPrincipal.Current.Identity as ClaimsIdentity).Claims.Select(c => new { key = c.Type, value = c.Value }),"application/json");
}
else
{
return req.CreateResponse(HttpStatusCode.Unauthorized,"Access Denied!");
}
要生成应用服务身份验证中使用的JWT令牌,您可以按照如何:为您的应用程序使用自定义身份验证以及adrian Hall关于自定义身份验证的书中自定义API控制器CustomAuthController
下的代码来创建JWT令牌。
更新:
对于App Service authentication下的自定义身份验证方法,我只想让op利用EasyAuth提供的身份验证/授权。我对这种方法做了一些测试,发现它对我来说是可行的。Op可以将用户名和密码发送到HttpTrigger进行身份验证,然后HttpTrigger后端需要验证用户信息,并使用Microsoft。蔚蓝色的可移动的服务器用于向客户端颁发应用程序服务身份验证令牌的登录包,然后客户端可以从AuthenticationToken
属性检索令牌。针对受保护API的后续请求可能如下所示:
https://<your-funapp-name>.azurewebsites.net/api/<httpTrigger-functionName>
Header: x-zumo-auth:<AuthenticationToken>
注:
对于这种方法,相关的HttpTrigger函数需要允许匿名访问,应用服务身份验证还需要选择允许匿名请求(无操作)。否则,应用程序服务身份验证和功能级身份验证都将验证请求。对于受保护的API,op需要手动添加系统。安全声称。索赔人。现在的身份I验证
正在检查。
我遵循本教程使用JWT令牌。令牌到期时间设置为仅5分钟,但如果我想在使用1分钟后使令牌无效,该怎么办?我希望能够对API进行调用,以删除我的令牌。 我正在使用Express和Node。 从我能收集到的信息来看,我的选择是拥有一个存储令牌的令牌db。当我想让我的令牌过期时,我会从DB中过期/删除该令牌。 我还看到人们随意地说“移除”物理硬盘空间中的令牌,但我无法找出令牌的物理存储位置,以便我移除它。
我收到两个jwt:一个OpenID连接ID令牌(ID\u令牌)和一个访问令牌(Access\u令牌)。OpenID的情况或多或少是清楚的-我可以使用JWKSendpoint验证它:https://smth.com/JWKS. 如例(https://bitbucket.org/b_c/jose4j/wiki/JWT例): 问题是如何继续使用访问令牌。我可以从中提取userId和userDetails
我们希望使用SpringOAuth2JWT令牌支持。我们的架构如下:Spring只提供了一个REST接口,前端由AngularJS构建,AngularJS查询Spring REST接口。出于授权目的,我们的前端团队希望使用JWT。因此,我查看了SpringOAuth2JWT支持,但仍然不知道如何与前端讨论JWT令牌。在阅读了一些教程后,我实现了以下内容: 我不确定工作流程如何。我猜:前端访问/oa
我被这个困扰了大约3天。基本上,我正在尝试使用Tymon在laravel中生成JWT令牌。这是我的控制器文件。 我使用Chrome postman测试了此api,但它报告了以下错误: JWT.php第73行出现错误异常:传递给Tymon\JWTAuth\JWT::fromUser()的参数1必须是第217行上的Tymon\JWTAuth\Contracts\JWTSubject、App\User给
我正在使用authlib库来解码JWT令牌。 请帮助我哪里出了问题。我已经为这个问题挣扎了2天了。请帮忙。
问题内容: 我们的React Native Redux应用程序使用JWT令牌进行身份验证。有许多操作需要此类令牌,并且例如在应用加载时会同时分派许多令牌。 例如 双方并要求JWT。我们将令牌保存在和中。我的问题是如何处理令牌到期。 最初,我将使用中间件来处理令牌到期 } 我遇到的问题是,对于令牌和操作,都会刷新令牌,因为在分发令牌和令牌时,令牌将过期。理想情况下,我想“暂停”需要身份验证的操作