Jay*_*Jay 8 c# jwt google-oauth json-web-signature
我正在从旧的 Google 登录库迁移到新的 Google Identity Services (GIS) 库。这是强制性的,因为从 2023 年 3 月起旧的将不再使用。
\n之前,我做了(为了清晰起见,进行了简化):
\n<script src="https://apis.google.com/js/api:client.js"></script>\ngapi.load();\nvar auth2 = gapi.auth2.init();\nauth2.attachClickHandler();\nonGoogleSignIn(googleUser); // attachClickHandler\'s callback\nvar profile = googleUser.getBasicProfile(); // profile info accessible\nvar authResponse = googleUser.getAuthResponse(); // auth response accessible\nvar accessToken = authResponse.id_token; // get actual access token\nRun Code Online (Sandbox Code Playgroud)\n现在,我正在尝试(为了清楚起见,进行了简化):
\n<script src="https://accounts.google.com/gsi/client"></script>\nvar gisClient = google.accounts.oauth2.initTokenClient();\ngisClient.requestAccessToken();\ncallback(); // initTokenClient\'s callback\nvar accessToken = response.access_token; // get access token in callback\nRun Code Online (Sandbox Code Playgroud)\n使用旧的谷歌登录库,我验证了访问令牌服务器端,如下所示:
\nPayload payload\xc2\xa0=\xc2\xa0await\xc2\xa0GoogleJsonWebSignature.ValidateAsync(accessToken);\nRun Code Online (Sandbox Code Playgroud)\n这还会在有效负载中返回用户的电子邮件和姓名。
\n我从 GIS 获取的访问令牌比从 GAPI 获取的旧访问令牌短得多。
\n在线令牌调试器告诉我这不是有效的 JWT 令牌。
\nValidateAsync 方法抛出异常:
\nJWT must consist of Header, Payload, and Signature\nRun Code Online (Sandbox Code Playgroud)\n考虑到它不是有效的 JWT 令牌,这并不奇怪。
\n我还尝试了以下调用:
\nPayload payload = await JsonWebSignature.VerifySignedTokenAsync(AccessToken, options);\nRun Code Online (Sandbox Code Playgroud)\n相同的结果。
\n官方文档没有说明如何为 C# / .NET 验证此令牌服务器端。
\n我在文档中找不到有关此问题的帮助。
\n我可以做什么来让服务器端访问令牌验证\xc2\xa0(以及电子邮件+个人资料的检索)与Google身份服务一起使用?
\n新的 Google 登录返回“ CredentialResponse ”,其中包含一个名为 的属性credential,它是您需要的 base64 格式的 JSON Web 令牌 (JWT)。
该 JWT 可以发送到客户端或服务器进行验证。
验证后您将收到用户个人资料数据。
<div id="g_id_onload"
data-client_id="YOUR_GOOGLE_CLIENT_ID"
data-callback="handleCredentialResponse">
</div>
<script>
function handleCredentialResponse(response) {
//get JSON Web Token (JWT) out of the response object
var jwt = response.credential;
//send JWT to backend server for validation
var result = ValidateAtServer(jwt);
//do something with result
KillUserInstantly(result);
}
</script>
Run Code Online (Sandbox Code Playgroud)
public static void ValidateAtServer(httpRequest)
{
//get jwt string from request
...
//validate it using Google.Apis.Auth (null if invalid)
var validPayload = await GoogleJsonWebSignature.ValidateAsync(jwtToken);
//get user data & use it
var userId = validPayload.Subject; //The unique ID of the user's Google Account
var email = validPayload.Email;
//do something with data
...
}
Run Code Online (Sandbox Code Playgroud)
subject或subJWT/ID 令牌示例
eyJhbGciOiJSUzI1NiIsImtpZCI6IjE1NDllMGFlZjU3NGQxYzdiZGQxMzZjMjAyYjhkMjkwNTgwYjE2NWMiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJuYmYiOjE2NTk3NTk0MzEsImF1ZCI6IjEwODgwNjIxNjM1NzMtaXMwdWQ1aDRza2JscmR1Njp0cnVlLCJheuZXMiLCJpYXQiOjE2NTk3NTk3MzEsImV4cCI6MTY1OTc2MzMzMSwianRpIjoiMDhlNjRhM2I1YzdmNzcxYmRjNTg5M2YwNmMyZjM1ZWZlMzIyNjYyMCJ9.UT07_-_4o_1D5NmVAI0QtXLupVZtXys3Kg0c--Cv-xrMpUZXInfqj142eojvTEf6QBmBPY3k-Mtu7djJAenB8Ed8-dWtvFdGdv5FdSJCSyLN70ObzCsdo_IgjG5r3HTw1C9pIFKggOklJrVN-zL0_Kh3TZdxfMdyEbAUuhIRCreUVgZ74XEWhR6x4l0EY9o2331HcrzAaie_LN4C8NVHhkQ0DLg5dO2v8T1uKG-eTyv-uvjMuhkSVBJR3MnvkGepj7o0h_ELGO9x74P9nNjIKTyZboEr4_YO0BP5aLPwt67LJHactAJ8DJTzugXwaJBVhusK1KPYYGRhy7nTfbfTSg
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2807 次 |
| 最近记录: |