コード例 #1
0
        private PendingIntent CreatePostAuthorizationIntent(Context context, AuthorizationRequest request,
                                                            AuthorizationServiceDiscovery discoveryDoc, AuthState authState)
        {
            var intent = new Intent(context, typeof(MainActivity));

            intent.PutExtra(Constants.AuthStateKey, authState.JsonSerializeString());
            if (discoveryDoc != null)
            {
                intent.PutExtra(Constants.AuthServiceDiscoveryKey, discoveryDoc.DocJson.ToString());
            }

            return(PendingIntent.GetActivity(context, request.GetHashCode(), intent, 0));
        }
コード例 #2
0
        private void FetchUserInfo()
        {
            if (authState.AuthorizationServiceConfiguration == null)
            {
                Console.WriteLine("Cannot make userInfo request without service configuration");
            }

            authState.PerformActionWithFreshTokens(authService, async(accessToken, idToken, ex) =>
            {
                if (ex != null)
                {
                    Console.WriteLine("Token refresh failed when fetching user info");
                    return;
                }

                AuthorizationServiceDiscovery discoveryDoc = GetDiscoveryDocFromIntent(Intent);
                if (discoveryDoc == null)
                {
                    throw new InvalidOperationException("no available discovery doc");
                }

                try
                {
                    using (var client = new HttpClient())
                    {
                        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
                        var response = await client.GetStringAsync(discoveryDoc.UserinfoEndpoint.ToString());

                        new Handler(MainLooper).Post(() =>
                        {
                            userInfoJson = new JSONObject(response);
                            RefreshUi();
                        });
                    }
                }
                catch (HttpRequestException ioEx)
                {
                    Console.WriteLine("Network error when querying userinfo endpoint:" + ioEx);
                }
                catch (JSONException jsonEx)
                {
                    Console.WriteLine("Failed to parse userinfo response: " + jsonEx);
                }
            });
        }
コード例 #3
0
ファイル: OpenIdService.cs プロジェクト: jollifft/OpenIdForms
        private PendingIntent CreatePostAuthorizationIntent(Context context, AuthorizationRequest request, AuthorizationServiceDiscovery discoveryDoc)
        {
            Intent intent = new Intent(context, typeof(RedirectActivity));

            intent.PutExtra(Constants.EXTRA_AUTH_STATE, AuthState.JsonSerializeString());
            if (discoveryDoc != null)
            {
                intent.PutExtra("authServiceDiscovery", discoveryDoc.DocJson.ToString());
            }

            return(PendingIntent.GetActivity(context, request.GetHashCode(), intent, 0));
        }
コード例 #4
0
        public static PendingIntent CreatePostAuthorizationIntent(Context context, AuthorizationRequest request, AuthorizationServiceDiscovery discoveryDoc, AuthState authState)
        {
            var intent = new Intent(context, typeof(TokenActivity));

            intent.PutExtra(EXTRA_AUTH_STATE, authState.JsonSerializeString());
            if (discoveryDoc != null)
            {
                intent.PutExtra(EXTRA_AUTH_SERVICE_DISCOVERY, discoveryDoc.DocJson.ToString());
            }

            return(PendingIntent.GetActivity(context, request.GetHashCode(), intent, 0));
        }
コード例 #5
0
        private void RefreshUi()
        {
            var refreshTokenInfoView = FindViewById <TextView>(Resource.Id.refresh_token_info);
            var accessTokenInfoView  = FindViewById <TextView>(Resource.Id.access_token_info);
            var idTokenInfoView      = FindViewById <TextView>(Resource.Id.id_token_info);
            var refreshTokenButton   = FindViewById <Button>(Resource.Id.refresh_token);

            if (authState.IsAuthorized)
            {
                refreshTokenInfoView.SetText(authState.RefreshToken == null ? Resource.String.no_refresh_token_returned : Resource.String.refresh_token_returned);
                idTokenInfoView.SetText(authState.IdToken == null ? Resource.String.no_id_token_returned : Resource.String.id_token_returned);

                if (authState.AccessToken == null)
                {
                    accessTokenInfoView.SetText(Resource.String.no_access_token_returned);
                }
                else
                {
                    var    expiresAt = authState.AccessTokenExpirationTime;
                    string expiryStr;
                    if (expiresAt == null)
                    {
                        expiryStr = Resources.GetString(Resource.String.unknown_expiry);
                    }
                    else
                    {
                        expiryStr = DateFormat.GetDateTimeInstance(DateFormat.Full, DateFormat.Full).Format(new Date(expiresAt.LongValue()));
                    }
                    var tokenInfo = string.Format(Resources.GetString(Resource.String.access_token_expires_at), expiryStr);
                    accessTokenInfoView.Text = tokenInfo;
                }
            }

            refreshTokenButton.Visibility = authState.RefreshToken != null ? ViewStates.Visible : ViewStates.Gone;

            var viewProfileButton = FindViewById <Button>(Resource.Id.view_profile);

            AuthorizationServiceDiscovery discoveryDoc = GetDiscoveryDocFromIntent(Intent);

            if (!authState.IsAuthorized || discoveryDoc == null || discoveryDoc.UserinfoEndpoint == null)
            {
                viewProfileButton.Visibility = ViewStates.Gone;
            }
            else
            {
                viewProfileButton.Visibility = ViewStates.Visible;
            }

            var userInfoCard = FindViewById(Resource.Id.userinfo_card);

            if (userInfoJson == null)
            {
                userInfoCard.Visibility = ViewStates.Invisible;
            }
            else
            {
                try
                {
                    string name = "???";
                    if (userInfoJson.Has("name"))
                    {
                        name = userInfoJson.GetString("name");
                    }
                    FindViewById <TextView>(Resource.Id.userinfo_name).Text = name;

                    FindViewById <TextView>(Resource.Id.userinfo_json).Text = userInfoJson.ToString(2);

                    userInfoCard.Visibility = ViewStates.Visible;
                }
                catch (JSONException ex)
                {
                    Console.WriteLine("Failed to read userinfo JSON: " + ex);
                }
            }
        }