Oauth 使用access_令牌的正确方法是什么?

Oauth 使用access_令牌的正确方法是什么?,oauth,asp.net-core-webapi,windows-live,Oauth,Asp.net Core Webapi,Windows Live,我正在尝试使用OAuth。在此示例中,提供程序是Windows Live。重定向返回了这个片段。我在符号前面加了换行符,使它更容易阅读 access_token=EwAwA61DBAAUGCCXc8wU/zFu9QnLdZXy%2bYnElFkAAQcQQB3c7oVYQmQhyeTOiw1Tp5iA7cjrLJbEnvXVoDlu48mjv7WX35RRIK3L3miAQEUrn5ZVNRSUV8dqiZi4kIko93k2bODqpIY7r/nBRmnTTbInajZm0iF1FLjXaFJ

我正在尝试使用OAuth。在此示例中,提供程序是Windows Live。重定向返回了这个片段。我在符号前面加了换行符,使它更容易阅读

access_token=EwAwA61DBAAUGCCXc8wU/zFu9QnLdZXy%2bYnElFkAAQcQQB3c7oVYQmQhyeTOiw1Tp5iA7cjrLJbEnvXVoDlu48mjv7WX35RRIK3L3miAQEUrn5ZVNRSUV8dqiZi4kIko93k2bODqpIY7r/nBRmnTTbInajZm0iF1FLjXaFJGzM/XJN4jZiZUtipwaNu66cSwbEhNVUWwZufHjE7SNDUQze3/ciGP9c%2bTampSUS23u%2bcuKrCbj8jPhFIj2Tbritf83YcVaXLJHpEYVz2a1GKHm8/TPot2MgcjD3yBOBd5b/QBImASEcdOpouiYIshi1Ddy20iYL1Jv6JRpPExeWd8q9sEfk4a%2btMHIPFJ%2bdy0e6X9nRMjlx%2bHP0FhUrOp4rADZgAACD41pKeivbukAAIVEy964MrcJsT6MwfHHf54bi9Nfhek/vARUG32qt1HId/3GgYDKcXblAk6I7qW%2boywDMa%2bck59pJms7/pEGqSkLtY%2b5M86%2bWvSG9bNAJWfQnKT1re5L4AxpbJ2J7JOw9md%2byBnt9I3hk%2bQGoY4ZoSMTtZ2QOxIH0rfgxVqrebUjAcCf1AIl7yBusgF1zJITPTBX1fLaEw48VjXjNygQq/N82%2baKZhU2ZMBTtUzgnod4SMrb/IOaQsDF6prVTihGHae6rbRL/Ul4C/au59NAijEBB9evjM6PxSMMpMmag6VTXdVeLeCBFitFwcjtRUH38yIuhPGalBnRTVHyLpm8cS06mrQM2n5j9XnMFBtQzEQEtdvtOsUkIgpVYmqZE38CEh9YAjJBxG1Xo9Pdz/DnHflfc3PWtO1xMZsP/krBMQFxQRTPBOiNv%2bH2DPF1TED35iW%2bS5VDbxjSur1dCVAPqv3Vbduia1moJ1AUYPm9P7%2bcY%2bIV3skuz4Dzk0zQPgU3h7N6zPwr0oi%2bNe548sk6Cqq/wbF7oV6ytuAc0fbedf49I7QA8x8BEruePwNWj2N6v2vJQqQm6fOC%2by7ZQSsJ9830hD6E5yp4YVht%2bux%2b8wu%2bDQ9x/VB6BXLNC%2b4Q2aIhDQmui/JMrgHXgo2okv9FywwVQdaSLXVasfrCVmqzDwGFhIC
&token_type=bearer
&expires_in=3600
&scope=wl.signin%20wl.emails
&user_id=AAAAAAAAAAAAAAAAAAAAAB1EauoOQMnYy_bu42gkx90
&state=STATE
我将其解析为名称-值对,并将decodeURIcomponent应用于每个组件

这给了我一个访问令牌值

EwAwA61DBAAUGCCXc8wU/zFu9QnLdZXy+YnElFkAAQcQQB3c7oVYQmQhyeTOiw1Tp5iA7cjrLJbEnvXVoDlu48mjv7WX35RRIK3L3miAQEUrn5ZVNRSUV8dqiZi4kIko93k2bODqpIY7r/nBRmnTTbInajZm0iF1FLjXaFJGzM/XJN4jZiZUtipwaNu66cSwbEhNVUWwZufHjE7SNDUQze3/ciGP9c+TampSUS23u+cuKrCbj8jPhFIj2Tbritf83YcVaXLJHpEYVz2a1GKHm8/TPot2MgcjD3yBOBd5b/QBImASEcdOpouiYIshi1Ddy20iYL1Jv6JRpPExeWd8q9sEfk4a+tMHIPFJ+dy0e6X9nRMjlx+HP0FhUrOp4rADZgAACD41pKeivbukAAIVEy964MrcJsT6MwfHHf54bi9Nfhek/vARUG32qt1HId/3GgYDKcXblAk6I7qW+oywDMa+ck59pJms7/pEGqSkLtY+5M86+WvSG9bNAJWfQnKT1re5L4AxpbJ2J7JOw9md+yBnt9I3hk+QGoY4ZoSMTtZ2QOxIH0rfgxVqrebUjAcCf1AIl7yBusgF1zJITPTBX1fLaEw48VjXjNygQq/N82+aKZhU2ZMBTtUzgnod4SMrb/IOaQsDF6prVTihGHae6rbRL/Ul4C/au59NAijEBB9evjM6PxSMMpMmag6VTXdVeLeCBFitFwcjtRUH38yIuhPGalBnRTVHyLpm8cS06mrQM2n5j9XnMFBtQzEQEtdvtOsUkIgpVYmqZE38CEh9YAjJBxG1Xo9Pdz/DnHflfc3PWtO1xMZsP/krBMQFxQRTPBOiNv+H2DPF1TED35iW+S5VDbxjSur1dCVAPqv3Vbduia1moJ1AUYPm9P7+cY+IV3skuz4Dzk0zQPgU3h7N6zPwr0oi+Ne548sk6Cqq/wbF7oV6ytuAc0fbedf49I7QA8x8BEruePwNWj2N6v2vJQqQm6fOC+y7ZQSsJ9830hD6E5yp4YVht+ux+8wu+DQ9x/VB6BXLNC+4Q2aIhDQmui/JMrgHXgo2okv9FywwVQdaSLXVasfrCVmqzDwGFhIC 
据我所知,在这一点上,我所要做的就是添加一个头
Authorization:Bearer
token值,但对于受“[Authorization]保护的路由,这样做会产生401个基本类型的Unauth。这让我有点不知所措,不知如何继续

查看我看到的浏览器调试信息

WWW-Authenticate: Bearer error=invalid_token
  • 令牌无效是否意味着这是一个不合适的令牌,或者它不能被解析为令牌
  • 到目前为止,我的方法正确吗
  • 是否需要进行某种服务器配置
  • 建议下一步行动
访问令牌看起来有点像Base64,但它不是有效的Base64,我检查过了。想想令牌的性质,它可能只是用令牌发行者的私钥加密的声明。如果是这样的话,您可以通过使用颁发者的公钥解密令牌来检查令牌的完整性,但我看不出如何使用此观察结果来找出我拥有401的原因

更新 这是引入令牌检查的startup.cs代码

  app.UseJwtBearerAuthentication(new JwtBearerOptions
  {
    SaveToken = true,
    TokenValidationParameters = tokenValidationParameters
  });
无法将我的令牌解码为JWT令牌。进一步阅读表明,JWT令牌有三个以点分隔的部分,每个部分都是base64编码的,这在我从Windows Live和Google收到的令牌中根本不存在(我现在已经用这两个进行了测试)


因此,如果需要JWT令牌,可能需要重新构造令牌请求。更多关于下一集。如果你知道我应该做什么,端点和参数等,请随时写下下下一集作为答案。这个问题似乎很突出。

访问令牌是盒子上写的——访问特定资源的令牌

JWT是一种身份令牌。要得到其中一个,我需要做的是

  • 使用此端点:
  • 指定
    id\u令牌的响应类型
  • 包括临时的
  • 指定
    openid
    的范围

但是,回到如何使用访问令牌的问题,您可以将其作为授权头中的承载令牌,用于向相关范围的提供者端点发出请求,例如wl.email

访问令牌是框中所示的内容-用于访问特定资源的令牌

JWT是一种身份令牌。要得到其中一个,我需要做的是

  • 使用此端点:
  • 指定
    id\u令牌的响应类型
  • 包括临时的
  • 指定
    openid
    的范围
但是,回到如何使用访问令牌的问题,您可以将其作为授权头中的承载令牌,在对所讨论范围的提供者端点的请求中使用,例如wl.email