@@ -187,19 +187,26 @@ static void GoogleSignIn_Signout(HandleRef self)
187187 internal static IntPtr GoogleSignIn_Result ( HandleRef self ) => googleIdTokenCredential . GetRawObject ( ) ;
188188
189189 internal static int GoogleSignIn_Status ( HandleRef self ) => GoogleSignInHelper . CallStatic < int > ( "getStatus" ) ;
190-
190+
191191 internal static string GoogleSignIn_GetServerAuthCode ( HandleRef self ) => authorizationResult ? . Call < string > ( "getServerAuthCode" ) ;
192192
193193 internal static string GoogleSignIn_GetUserId ( HandleRef self )
194194 {
195195 try
196196 {
197- var idTokenPart = googleIdTokenCredential ? . Call < string > ( "getIdToken" ) ? . Split ( '.' ) ? . ElementAtOrDefault ( 1 ) ;
198- if ( ! ( idTokenPart ? . Length is int length && length > 1 ) )
197+ string idTokenFull = googleIdTokenCredential ? . Call < string > ( "getIdToken" ) ;
198+ string idTokenPart = idTokenFull ? . Split ( '.' ) ? . ElementAtOrDefault ( 1 ) ;
199+ if ( ! ( idTokenPart ? . Length > 1 ) )
199200 return null ;
200201
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 ) ;
203210 return jobj ? [ "sub" ] ? . ToString ( ) ;
204211 }
205212 catch ( Exception e )
@@ -293,7 +300,7 @@ internal static extern UIntPtr GoogleSignIn_GetServerAuthCode(
293300
294301 [ DllImport ( DllName ) ]
295302 internal static extern UIntPtr GoogleSignIn_GetUserId ( HandleRef self , [ In , Out ] byte [ ] bytes , UIntPtr len ) ;
296-
303+
297304 internal static string GoogleSignIn_GetServerAuthCode ( HandleRef self ) =>
298305 OutParamsToString ( ( out_string , out_size ) => GoogleSignIn_GetServerAuthCode ( self , out_string , out_size ) ) ;
299306
0 commit comments