bdc*_*der 11 azure jwt azure-functions
我相信那里有人已经这样做了,但我还没有找到任何有关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, return Invalid User response
*/
// Step 3 - Create JWT token - ????
// Step 4 - Return JWT token - ????
}
Run Code Online (Sandbox Code Playgroud)
授权:
假设用户已经过身份验证并且现在有一个JWT令牌(我假设JWT令牌已保存在用户会话中;如果有人想提供更多信息,请执行此操作):
向Azure功能发出POST请求以执行某些操作(例如获取用户出生日期).上面获得的JWT令牌(从POST数据或标题 - 它是否重要?)以及函数所需的任何其他数据加载.
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
}
Run Code Online (Sandbox Code Playgroud)
任何和所有信息都会真正帮助我们这些人(我)了解如何使用JWT和Azure(匿名)函数来构建"安全"REST API.
提前致谢.
任何和所有信息都会真正帮助我们这些人(我)了解如何使用JWT和Azure(匿名)函数来构建"安全"REST API.
根据我的理解,您可以使用azure功能代码中的相关库来生成/验证JWT令牌.以下是一些教程,您可以参考它们:
Jwt.Net,一个用于.NET的JWT(JSON Web Token)实现
此外,您可以利用App Service身份验证/授权来配置功能应用程序级别身份验证/授权.您可以转到功能应用程序设置,单击平台功能选项卡下的"网络>身份验证/授权".启用App Service身份验证并选择允许匿名请求(无操作),如下所示:
您可以使用匿名访问创建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!");
}
Run Code Online (Sandbox Code Playgroud)
要生成应用程序服务身份验证中使用的JWT令牌,您可以按照如何:对您的应用程序使用自定义身份验证,以及CustomAuthControlleradrian hall的有关自定义身份验证的书中的自定义API控制器下的代码来创建JWT令牌.
更新:
对于App Service Authentication下的自定义身份验证方法,我只希望op利用EasyAuth提供的身份验证/授权.我已经对这种方法做了一些测试,发现它可以在我这边工作.Op可以将用户名和密码发送到HttpTrigger进行身份验证,然后HttpTrigger后端需要验证用户信息,并使用Microsoft.Azure.Mobile.Server.Login包向客户端发出App Service Authentication令牌,然后客户端可以从AuthenticationToken属性中检索令牌.针对受保护API的后续请求可能如下所示:
https://<your-funapp-name>.azurewebsites.net/api/<httpTrigger-functionName>
Header: x-zumo-auth:<AuthenticationToken>
Run Code Online (Sandbox Code Playgroud)
注意:
对于这种方法,相关的HttpTrigger函数需要允许匿名访问,App Service Authentication还需要选择Allow Anonymous requests(no action).否则,App Service身份验证和功能级别身份验证都将验证请求.对于受保护的API,op需要手动添加System.Security.Claims.ClaimsPrincipal.Current.Identity.IsAuthenticated检查.
| 归档时间: |
|
| 查看次数: |
9731 次 |
| 最近记录: |