@@ -187,19 +187,26 @@ static void GoogleSignIn_Signout(HandleRef self)
187
187
internal static IntPtr GoogleSignIn_Result ( HandleRef self ) => googleIdTokenCredential . GetRawObject ( ) ;
188
188
189
189
internal static int GoogleSignIn_Status ( HandleRef self ) => GoogleSignInHelper . CallStatic < int > ( "getStatus" ) ;
190
-
190
+
191
191
internal static string GoogleSignIn_GetServerAuthCode ( HandleRef self ) => authorizationResult ? . Call < string > ( "getServerAuthCode" ) ;
192
192
193
193
internal static string GoogleSignIn_GetUserId ( HandleRef self )
194
194
{
195
195
try
196
196
{
197
- var idTokenPart = googleIdTokenCredential ? . Call < string > ( "getIdToken" ) ? . Split ( '.' ) ? . ElementAtOrDefault ( 1 ) ;
198
- if ( ! ( idTokenPart ? . Length is int length && length > 1 ) )
197
+ string idToken = googleIdTokenCredential ? . Call < string > ( "getIdToken" ) ;
198
+ string idTokenPart = idToken ? . Split ( '.' ) ? . ElementAtOrDefault ( 1 ) ;
199
+ if ( ! ( idTokenPart ? . Length > 1 ) )
199
200
return null ;
200
201
201
- string fill = new string ( '=' , ( 4 - ( idTokenPart . Length % 4 ) ) % 4 ) ;
202
- var jobj = Newtonsoft . Json . Linq . JObject . Parse ( Encoding . UTF8 . GetString ( Convert . FromBase64String ( idTokenPart + fill ) ) ) ;
202
+ // Replace URL-safe characters and fix padding
203
+ idTokenPart = idTokenPart . Replace ( '-' , '+' ) . Replace ( '_' , '/' ) ;
204
+ int mod = idTokenPart . Length % 4 ;
205
+ if ( mod > 0 )
206
+ idTokenPart += new string ( '=' , 4 - mod ) ;
207
+ var idTokenFromBase64 = Convert . FromBase64String ( idTokenPart ) ;
208
+ var idToken = Encoding . UTF8 . GetString ( idTokenFromBase64 ) ;
209
+ var jobj = Newtonsoft . Json . Linq . JObject . Parse ( idToken ) ;
203
210
return jobj ? [ "sub" ] ? . ToString ( ) ;
204
211
}
205
212
catch ( Exception e )
@@ -293,7 +300,7 @@ internal static extern UIntPtr GoogleSignIn_GetServerAuthCode(
293
300
294
301
[ DllImport ( DllName ) ]
295
302
internal static extern UIntPtr GoogleSignIn_GetUserId ( HandleRef self , [ In , Out ] byte [ ] bytes , UIntPtr len ) ;
296
-
303
+
297
304
internal static string GoogleSignIn_GetServerAuthCode ( HandleRef self ) =>
298
305
OutParamsToString ( ( out_string , out_size ) => GoogleSignIn_GetServerAuthCode ( self , out_string , out_size ) ) ;
299
306
0 commit comments