我目前正在创建一个用户可以通过他的Google帐户登录的Web应用程序.这适用于客户端,但我也想保护REST API调用.为此,我通过"授权"标题向每个请求发送"Google id令牌".现在,我想在C#中验证传递的令牌是否有效.我发现有一个.NET库可以这样做,但我没有找到任何关于如何简单验证令牌的明确文档.
有没有人有这个指针?
小智 7
另一个简化的答案(针对.net 6):
将此 nuget 包添加到您的项目中: https://www.nuget.org/packages/Google.Apis.Auth
添加using语句:
使用 Google.Apis.Auth;
在您的控制器中创建此方法:
[AllowAnonymous]
[HttpPost("verify")]
public async Task<ActionResult> Verify(){
string token = Request.Headers["Authorization"].ToString().Remove(0,7); //remove Bearer
var payload = await VerifyGoogleTokenId(token);
if (payload==null)
{
return BadRequest("Invalid token");
}
return Ok(payload); }
Run Code Online (Sandbox Code Playgroud)
创建VerifyGoogleTokenId函数:
public async Task<GoogleJsonWebSignature.Payload> VerifyGoogleTokenId(string token){
try
{
// uncomment these lines if you want to add settings:
// var validationSettings = new GoogleJsonWebSignature.ValidationSettings
// {
// Audience = new string[] { "yourServerClientIdFromGoogleConsole.apps.googleusercontent.com" }
// };
// Add your settings and then get the payload
// GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(token, validationSettings);
// Or Get the payload without settings.
GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(token);
return payload;
}
catch (System.Exception)
{
Console.WriteLine("invalid google token");
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
通过向 yourapi.com/verify 发送发布请求来测试实施。不要忘记授权标头。
我的答案与上面的答案相同,但有一些细节.
using Google.Apis.Auth;
using Google.Apis.Auth.OAuth2;
GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(Token);
...
Run Code Online (Sandbox Code Playgroud)
有效负载对象包含您需要的所有信息.
| 归档时间: |
|
| 查看次数: |
2021 次 |
| 最近记录: |