繁体   English   中英

如何在Azure函数中对JWT令牌进行身份验证

[英]How to authenticate jwt token in azure function

嗨,我有一个azure函数,我试图从jwt令牌中获取用户的当前ID。

我目前正在从对我来说有意义的标题中读取它,但是我担心我可能没有遵循最佳实践。

同样,第一行对我来说似乎有些拙劣。

你们可以看看它,并建议我如何改善它。

还是这完全是错误的方法?

[FunctionName(nameof(GetDates))]
public static async Task<IActionResult> Run(

[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "dates")]HttpRequest req, ILogger logger, [Table("Date")] CloudTable table

            )

        {

            var token = req.Headers["Authorization"][0].Replace("Bearer ", string.Empty);



            var handler = new JwtSecurityTokenHandler();

           var jtToken = handler.ReadJwtToken(token);



            var userId = jtToken.Payload["Id"].ToString();

从您的代码中看来,您只是从jwt令牌有效负载中读取了索赔值,但尚未验证jwt令牌。

通常,Jwt令牌由三部分组成:标头,有效载荷,签名。

Header - Provides information about how to validate the token including information about the type of token and how it was signed.

Payload - Contains all of the important data about the user or app that is attempting to call your service.

Signature - Is the raw material used to validate the token.

每个部分都基于64编码,并用“。”分隔。 在jwt中,您可以在此处解析jwt以检查其Header和Payload: https : //jwt.io/

签名由标头和有效内容组成,并用身份提供者(由其发行此jwt)的私钥进行签名。

如果要验证jwt,您应该做的工作是从身份提供者那里获取公共密钥,并使用该公共密钥来解锁签名部分:您将获得Header和Payload的明文值。 如果jwt的Header和Payload的内容与您从Signature部分解锁的内容完全相同,则意味着此令牌是经过验证的令牌。

这是有关如何从Azure AD验证jwt的文章 ,它认为它将对您有所帮助。 如果您还有其他疑问,请随时告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM