|
287 | 287 | "print(\"Setting up Amazon Cognito user pool...\")\n", |
288 | 288 | "cognito_config = setup_cognito_user_pool()\n", |
289 | 289 | "print(\"Cognito setup completed ✓\")\n", |
290 | | - "print(f\"User Pool ID: {cognito_config.get('user_pool_id', 'N/A')}\")\n", |
| 290 | + "print(f\"User Pool ID: {cognito_config.get('pool_id', 'N/A')}\")\n", |
291 | 291 | "print(f\"Client ID: {cognito_config.get('client_id', 'N/A')}\")" |
292 | 292 | ] |
293 | 293 | }, |
|
448 | 448 | "import boto3\n", |
449 | 449 | "import json\n", |
450 | 450 | "import sys\n", |
| 451 | + "import base64\n", |
| 452 | + "import time\n", |
451 | 453 | "from boto3.session import Session\n", |
452 | 454 | "from datetime import timedelta\n", |
| 455 | + "import traceback\n", |
453 | 456 | "\n", |
454 | 457 | "from mcp import ClientSession\n", |
455 | 458 | "from mcp.client.streamable_http import streamablehttp_client\n", |
456 | 459 | "\n", |
| 460 | + "def get_refresh_token(client_id, refresh_token, region):\n", |
| 461 | + " \"\"\"Refresh access token using refresh token\"\"\"\n", |
| 462 | + " cognito_client = boto3.client('cognito-idp', region_name=region)\n", |
| 463 | + " auth_response = cognito_client.initiate_auth(\n", |
| 464 | + " ClientId=client_id,\n", |
| 465 | + " AuthFlow='REFRESH_TOKEN_AUTH',\n", |
| 466 | + " AuthParameters={'REFRESH_TOKEN': refresh_token}\n", |
| 467 | + " )\n", |
| 468 | + " return auth_response['AuthenticationResult']['AccessToken']\n", |
| 469 | + "\n", |
| 470 | + "def get_valid_token(bearer_token, client_id, refresh_token, region):\n", |
| 471 | + " \"\"\"Check token expiry and refresh if needed\"\"\"\n", |
| 472 | + " try:\n", |
| 473 | + " payload = bearer_token.split('.')[1]\n", |
| 474 | + " payload += '=' * (4 - len(payload) % 4)\n", |
| 475 | + " decoded = json.loads(base64.b64decode(payload))\n", |
| 476 | + " \n", |
| 477 | + " current_time = int(time.time())\n", |
| 478 | + " if decoded['exp'] - current_time < 300:\n", |
| 479 | + " print(\"🔄 Token expiring soon, refreshing...\")\n", |
| 480 | + " new_token = get_refresh_token(client_id, refresh_token, region)\n", |
| 481 | + " print(\"✓ Token refreshed successfully\")\n", |
| 482 | + " return new_token\n", |
| 483 | + " \n", |
| 484 | + " return bearer_token\n", |
| 485 | + " except Exception as e:\n", |
| 486 | + " print(\"🔄 Invalid token, refreshing...\", e)\n", |
| 487 | + " traceback.print_exc()\n", |
| 488 | + " return get_refresh_token(client_id, refresh_token, region)\n", |
| 489 | + "\n", |
457 | 490 | "async def main():\n", |
458 | 491 | " boto_session = Session()\n", |
459 | 492 | " region = boto_session.region_name\n", |
|
471 | 504 | " secret_value = response['SecretString']\n", |
472 | 505 | " parsed_secret = json.loads(secret_value)\n", |
473 | 506 | " bearer_token = parsed_secret['bearer_token']\n", |
474 | | - " print(\"✓ Retrieved bearer token from Secrets Manager\")\n", |
| 507 | + " refresh_token = parsed_secret['refresh_token']\n", |
| 508 | + " client_id = parsed_secret['client_id']\n", |
| 509 | + " print(\"✓ Retrieved credentials from Secrets Manager\")\n", |
| 510 | + " \n", |
| 511 | + " # Validate and refresh token if needed\n", |
| 512 | + " bearer_token = get_valid_token(bearer_token, client_id, refresh_token, region)\n", |
475 | 513 | " \n", |
476 | 514 | " except Exception as e:\n", |
477 | 515 | " print(f\"Error retrieving credentials: {e}\")\n", |
|
571 | 609 | "import boto3\n", |
572 | 610 | "import json\n", |
573 | 611 | "import sys\n", |
| 612 | + "import base64\n", |
| 613 | + "import time\n", |
574 | 614 | "from boto3.session import Session\n", |
575 | 615 | "from datetime import timedelta\n", |
576 | 616 | "\n", |
577 | 617 | "from mcp import ClientSession\n", |
578 | 618 | "from mcp.client.streamable_http import streamablehttp_client\n", |
579 | 619 | "\n", |
| 620 | + "def get_refresh_token(client_id, refresh_token, region):\n", |
| 621 | + " \"\"\"Refresh access token using refresh token\"\"\"\n", |
| 622 | + " cognito_client = boto3.client('cognito-idp', region_name=region)\n", |
| 623 | + " auth_response = cognito_client.initiate_auth(\n", |
| 624 | + " ClientId=client_id,\n", |
| 625 | + " AuthFlow='REFRESH_TOKEN_AUTH',\n", |
| 626 | + " AuthParameters={'REFRESH_TOKEN': refresh_token}\n", |
| 627 | + " )\n", |
| 628 | + " return auth_response['AuthenticationResult']['AccessToken']\n", |
| 629 | + "\n", |
| 630 | + "def get_valid_token(bearer_token, client_id, refresh_token, region):\n", |
| 631 | + " \"\"\"Check token expiry and refresh if needed\"\"\"\n", |
| 632 | + " try:\n", |
| 633 | + " payload = bearer_token.split('.')[1]\n", |
| 634 | + " payload += '=' * (4 - len(payload) % 4)\n", |
| 635 | + " decoded = json.loads(base64.b64decode(payload))\n", |
| 636 | + " \n", |
| 637 | + " current_time = int(time.time())\n", |
| 638 | + " if decoded['exp'] - current_time < 300:\n", |
| 639 | + " print(\"🔄 Token expiring soon, refreshing...\")\n", |
| 640 | + " new_token = get_refresh_token(client_id, refresh_token, region)\n", |
| 641 | + " print(\"✓ Token refreshed successfully\")\n", |
| 642 | + " return new_token\n", |
| 643 | + " \n", |
| 644 | + " return bearer_token\n", |
| 645 | + " except:\n", |
| 646 | + " print(\"🔄 Invalid token, refreshing...\")\n", |
| 647 | + " return get_refresh_token(client_id, refresh_token, region)\n", |
| 648 | + "\n", |
580 | 649 | "async def main():\n", |
581 | 650 | " boto_session = Session()\n", |
582 | 651 | " region = boto_session.region_name\n", |
|
594 | 663 | " secret_value = response['SecretString']\n", |
595 | 664 | " parsed_secret = json.loads(secret_value)\n", |
596 | 665 | " bearer_token = parsed_secret['bearer_token']\n", |
597 | | - " print(\"✓ Retrieved bearer token from Secrets Manager\")\n", |
| 666 | + " refresh_token = parsed_secret['refresh_token']\n", |
| 667 | + " client_id = parsed_secret['client_id']\n", |
| 668 | + " print(\"✓ Retrieved credentials from Secrets Manager\")\n", |
| 669 | + " \n", |
| 670 | + " # Validate and refresh token if needed\n", |
| 671 | + " bearer_token = get_valid_token(bearer_token, client_id, refresh_token, region)\n", |
598 | 672 | " \n", |
599 | 673 | " except Exception as e:\n", |
600 | 674 | " print(f\"Error retrieving credentials: {e}\")\n", |
|
0 commit comments