【问题标题】:How to authenticate jwt token in azure function如何在 azure 函数中验证 jwt 令牌
【发布时间】:2019-09-09 14:59:45
【问题描述】:

您好,我有一个 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();

【问题讨论】:

  • 这是 AAD 令牌吗?

标签: c# jwt azure-functions


【解决方案1】:

从您的代码看来,您只是从 jwt 令牌有效负载中读出了声明值,但您尚未对 jwt 令牌进行身份验证。

一般来说,Jwt 令牌由三部分组成:Header、payload、signature。

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 部分解锁的内容完全相同,则表示此令牌是经过验证的。

This is a post about how to verify a jwt from Azure AD,觉得对你有帮助。如果您有任何进一步的疑虑,请随时告诉我。

【讨论】:

    猜你喜欢
    • 2016-12-02
    • 2020-07-08
    • 2021-11-16
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2020-10-12
    • 2020-03-07
    • 2019-06-23
    相关资源
    最近更新 更多