Openid 新但无效的id\u令牌

Openid 新但无效的id\u令牌,openid,aurelia,asp.net-core-webapi,Openid,Aurelia,Asp.net Core Webapi,我向谷歌或微软请求一个openid\u令牌,在通过动议并同意我的应用程序对openid范围的请求后,一个id\u令牌被正式返回。我可以把它分为点,前两部分可以解码为有效的JSON,所以它是JWT,毫无疑问 但是,当我尝试将其用作对aspnetcore WebApi方法的请求的授权标头中的承载令牌时(该方法用[Authorize]注释),我得到401 Unauth,该标头为: WWW-Authenticate: Bearer error=invalid_token, error_descripti

我向谷歌或微软请求一个openid\u令牌,在通过动议并同意我的应用程序对
openid
范围的请求后,一个id\u令牌被正式返回。我可以把它分为点,前两部分可以解码为有效的JSON,所以它是JWT,毫无疑问

但是,当我尝试将其用作对aspnetcore WebApi方法的请求的授权标头中的承载令牌时(该方法用
[Authorize]
注释),我得到401 Unauth,该标头为:

WWW-Authenticate: Bearer error=invalid_token, error_description="The signature is invalid"
在我看来,微软和谷歌都不太可能发行无用的JWT。所以现在我需要知道是什么导致中间件的这种反应,它是最新的,设置如下:

app.UseJwtBearerAuthentication(new JwtBearerOptions { SaveToken = true });
如果有关系,这里是我为令牌请求编辑的参数

  "uri": "https://accounts.google.com/o/oauth2/auth",
  "parameters": {
    "request_type": "token",
    "response_type": "id_token",
    "client_id": "REDACTED.apps.googleusercontent.com",
    "redirect_uri": "https://REDACTED/",
    "scope": "openid",
    "state": "STATE",
    "nonce": "wibble",
    "allow_signup": "true"
  }
很明显,状态和nonce是稳定的伪值,而我明白了这一点

那么,无效?世界跆拳道联盟?我尝试使用我的代码捕获的令牌进行检查,它似乎并不不高兴。头和有效载荷被解码了,但我真的不清楚如何验证签名,他们想要更多的值,我不清楚从哪里获得它们。这方面的指导可能会有所帮助

这是我提取的令牌

eyJhbGciOiJSUzI1NiIsImtpZCI6IjJiMmU0ZDZmMTgyMWFkNGQ3NmQ0NTUzYzk1MWI3NTYyMmFjYjY1MzkifQ.eyJhenAiOiI3ODg4NTA3NTgwMTItdTUwbnVkMDU0aDJsNDIxOXRlaXYxbzU4Mzg5am1iNnAuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI3ODg4NTA3NTgwMTItdTUwbnVkMDU0aDJsNDIxOXRlaXYxbzU4Mzg5am1iNnAuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTU2NTI3NjAwMDUzMDY1MDIxNTAiLCJub25jZSI6IndpYmJsZSIsImlzcyI6ImFjY291bnRzLmdvb2dsZS5jb20iLCJpYXQiOjE0OTUyNTA0MzcsImV4cCI6MTQ5NTI1NDAzN30.Mb3E32cVeJ4dvPw-Fpj5j1GwXIFzwTaa0fvSEh7YjvR3d18hC8_G0avWYGNb6CoJzasZnsSGDLDi_s0Cfpiov0ZBoJVap69udkR1RiTbOc-WxcgtimflG80LwpPpNepEjuJfF1i1OwIFSputpXKbFQOsTP5fN4Xe7cE-EjTrHVX8zzR2v31pqrjh1o5HSK2QEQXM7eEYYvJrDMpgjtL5r22DoQdPHCZgt1Wi3XnTRn_MCD8zWX99Z6n11TpD6IWxlgzBCItlrr6nXRv1Np9ti2Mvw7p0-gCmpFiJKD60J34aqB1AJUpPFXuZWpV--KTTA3T55rC2lRg6vSueeK6QoQ
为了你的方便,这里又是点对点的分割

eyJhbGciOiJSUzI1NiIsImtpZCI6IjJiMmU0ZDZmMTgyMWFkNGQ3NmQ0NTUzYzk1MWI3NTYyMmFjYjY1MzkifQ

eyJhenAiOiI3ODg4NTA3NTgwMTItdTUwbnVkMDU0aDJsNDIxOXRlaXYxbzU4Mzg5am1iNnAuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI3ODg4NTA3NTgwMTItdTUwbnVkMDU0aDJsNDIxOXRlaXYxbzU4Mzg5am1iNnAuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTU2NTI3NjAwMDUzMDY1MDIxNTAiLCJub25jZSI6IndpYmJsZSIsImlzcyI6ImFjY291bnRzLmdvb2dsZS5jb20iLCJpYXQiOjE0OTUyNTA0MzcsImV4cCI6MTQ5NTI1NDAzN30

Mb3E32cVeJ4dvPw-Fpj5j1GwXIFzwTaa0fvSEh7YjvR3d18hC8_G0avWYGNb6CoJzasZnsSGDLDi_s0Cfpiov0ZBoJVap69udkR1RiTbOc-WxcgtimflG80LwpPpNepEjuJfF1i1OwIFSputpXKbFQOsTP5fN4Xe7cE-EjTrHVX8zzR2v31pqrjh1o5HSK2QEQXM7eEYYvJrDMpgjtL5r22DoQdPHCZgt1Wi3XnTRn_MCD8zWX99Z6n11TpD6IWxlgzBCItlrr6nXRv1Np9ti2Mvw7p0-gCmpFiJKD60J34aqB1AJUpPFXuZWpV--KTTA3T55rC2lRg6vSueeK6QoQ
显然,这一个现在已经过期了,但是如果您知道如何验证签名,那么可以方便地检查我是否损坏了提取签名的令牌。 有谁能帮我理解出了什么问题以及如何处理

汉斯下面的回答似乎有可能,但现实似乎与文件不符。然后我找到了这个问题,并从一位MSFT人士那里得到了答案。似乎只有当您请求了作用域时才能获得身份验证令牌。这是有道理的;身份验证令牌授权访问令牌请求中指定的一个或多个资源。我的请求中指定的唯一作用域是openid,它是对接收到的id_令牌的请求

但我并没有试图获得使用提供者范围(如用户的通讯簿或电子邮件)的权限。我正在尝试将身份验证委托给提供商。不是授权。我希望建立用户的身份-据我所知,这是
id\u令牌的要点
,我希望使用我自己的用户角色数据库进行授权,该数据库基本上定义了特定于应用程序的范围

我认为这仍然是一个可以回答的问题,即使答案是关于如何使用aspnetcore web api实现这一点的略图,并有相关文档的链接支持

明确说明这是一个受支持的场景。这里的关键短语是SSO或单点登录。我开始认为这更多的是一个如何为使用aspcorenet webapi的SPA实现SSO的问题

但最初的问题是:为什么这些代币看起来是无效的
签名?

在Google和Microsoft支持的OpenID连接流中,您将在对授权请求的响应中获得
id\u令牌
access\u令牌
id\u令牌
用于向客户端(即您的应用程序)验证用户身份,而
access\u令牌
可用于访问API

因此,您应该在API调用的
Authorization:bearer
头中显示
access\u令牌
,而不是
id\u令牌