View a markdown version of this page

Vinculação de sessão de URL de autorização do OAuth 2.0 - Amazon Bedrock AgentCore

Vinculação de sessão de URL de autorização do OAuth 2.0

AgentCore O Identity fornece recuperações de token de acesso OAuth 2.0 para que seus aplicativos de agentes acessem fornecedores de aplicativos terceirizados ou recursos protegidos por provedores de identidade/servidores de autorização. Se um aplicativo ou recurso exigir que um usuário autorize explicitamente com um fluxo de código de autorização do OAuth, o AgentCore Identity gerará um URL de autorização para o usuário navegar e consentir o acesso. Em seguida, após o consentimento do usuário, o AgentCore Identity busca o token de acesso do aplicativo ou recurso em nome dos usuários e o armazena no AgentCore Identity Token Vault.

No entanto, como um usuário pode enviar acidentalmente a URL de autorização para outro usuário e obter acesso ao aplicativo ou recurso desse usuário, seu aplicativo deve verificar se o usuário que inicia uma solicitação de autorização ainda é o mesmo usuário que concedeu consentimento ao aplicativo ou ao recurso. Para fazer isso, você precisa registrar um endpoint de aplicativo HTTPS disponível publicamente com o AgentCore Identity que gerencie a verificação do usuário.

Como funciona a vinculação de sessões

O diagrama de fluxo a seguir e as etapas correspondentes mostram o processo de vinculação da sessão de URL de autorização do OAuth 2.0:

Diagrama de fluxo de vinculação da sessão de URL de autorização do OAuth 2.0
  1. Invoque o agente — Seu código de agente invoca a GetResourceOauth2Token API para recuperar uma URL de autorização, quando um usuário do agente de origem deseja acessar algum aplicativo ou recurso que possui. he/she

  2. Gerar URL de autorização — A AgentCore identidade gera uma URL de autorização e uma URI de sessão para o usuário navegar e consentir o acesso.

  3. Autorizar e obter o token de acesso — O usuário navega até o URL de autorização e concede consentimento para que seu agente acesse his/her o recurso. Depois disso, o AgentCore Identity redireciona o navegador do usuário para o endpoint do aplicativo HTTPS com informações contendo o usuário de origem da solicitação de autorização. Nesse ponto, o endpoint do aplicativo HTTPS determina se o usuário do agente de origem ainda é o mesmo que o usuário atualmente conectado ao seu aplicativo. Se eles corresponderem, o endpoint do aplicativo será invocado CompleteResourceTokenAuth para que o AgentCore Identity possa buscar e armazenar o token de acesso.

  4. Re-invoke agente para obter o token de acesso — Quando o aplicativo retornar uma resposta válida, seu aplicativo de agente poderá recuperar os tokens de OAuth2.0 acesso que foram originalmente solicitados para o usuário. Se os usuários não corresponderem, seu aplicativo simplesmente não fará nada ou registrará a tentativa.

Ao permitir que o endpoint do aplicativo verifique a identidade do usuário, o AgentCore Identity permite que o aplicativo do agente garanta que seja sempre o mesmo usuário que iniciou a solicitação de autorização e aquele que consentiu o acesso.

Detalhes da implantação

As etapas a seguir orientam você na configuração da identidade da carga de trabalho, do provedor de credenciais do OAuth 2.0 e do cliente do aplicativo OAuth 2.0 do provedor de recursos para recuperar um token de acesso do OAuth 2.0 para seu aplicativo de agente.

Você pode se referir ao código de amostra como um exemplo de um aplicativo em funcionamento: implementação do servidor de retorno de chamada OAuth 2.0.

Importante

Quando você usa a AgentCore CLI agentcore dev em um ambiente local, para simplificar o desenvolvimento e os testes locais, a CLI hospeda o endpoint de retorno de chamada e chama a CompleteResourceTokenAuth API em seu nome para verificar a sessão do usuário e obter tokens de acesso do OAuth 2.0, para que você possa pular as etapas 1, 2 e 4 na configuração a seguir. No entanto, ao implantar seu código de agente no AgentCore Runtime, seu aplicativo web que se conecta ao tempo de execução do agente deve hospedar ele próprio um endpoint de retorno de chamada HTTPS acessível ao público, o endpoint de retorno de chamada deve ser registrado na identidade da carga de trabalho como uma chamada UpdateWorkloadIdentity usando o ID do agente fornecido AllowedResourceOAuth2ReturnUrl pelo AgentCore Runtime e, em seguida, chamar a CompleteResourceTokenAuth API depois de verificar a sessão atual do navegador do usuário para proteger seus fluxos de autorização do OAuth 2.0.

Para implementar a vinculação de sessão de URL de autorização do OAuth 2.0

  1. Crie uma URL de aplicativo — Para seu aplicativo de navegador voltado para o usuário, crie e hospede uma nova URL que possa ser acessada pelo navegador do usuário e que possa aceitar solicitações de redirecionamentos do navegador. Essa página deve redirecionar para uma página do aplicativo para que seu usuário possa continuar com a sessão do agente OU renderizar alguma página da web básica instruindo seus usuários a retornar a sessão de agente atualmente ativa. Em partes posteriores da implementação, essa página é usada para validação da sessão ativa do usuário atual, portanto, essa página também deve ser capaz de acessar e manter os dados da sessão do usuário do seu aplicativo.

    Por exemplo, seu aplicativo pode fazer com que seus usuários interajam com um agente em uma página principal do aplicativo, comohttps://myagentapp.com/assistant. Você desejará expor um novo URL como https://myagentapp.com/callback esse, por enquanto, redirecionará para a página principal do aplicativo. A lógica de código real em seu /callback endpoint será atualizada posteriormente ao seguir este guia.

  2. Atualize a identidade da carga de trabalho com o URL do aplicativo — (Pode ser ignorado se estiver testando localmente via AgentCore CLI) Depois de criar e hospedar um URL de aplicativo para o qual o Identity possa ser redirecionado, atualize a AgentCore identidade da carga de trabalho para que o URL do aplicativo seja registrado como um. AllowedResourceOauth2ReturnUrl Certifique-se de que as credenciais do IAM usadas tenham permissões para chamar CreateWorkloadIdentity ou UpdateWorkloadIdentity dependendo se você está criando uma nova identidade de carga de trabalho ou atualizando uma existente.

    nota

    Para identidades de carga de trabalho criadas em seu nome pelo AgentCore Runtime ou pelo Gateway, o nome da identidade da carga de trabalho corresponderá à ID de tempo de execução ou à ID do gateway emitida pelos serviços.

    Exemplo de chamada de UpdateWorkloadIdentity API:

    aws bedrock-agentcore-control update-workload-identity --name GoogleCalendarAgent \ --allowed-resource-oauth2-return-urls https://myagentapp.com/callback
  3. Crie um provedor de credenciais do OAuth 2.0 no AgentCore Identity — Para registrar totalmente o provedor de credenciais do OAuth 2.0, você precisa de permissões para ligar e. CreateOauth2CredentialProvider UpdateOauth2CredentialProvider Siga estas etapas:

    • Ligue CreateOauth2CredentialProvider com espaços reservados para obter o ID do cliente e o segredo do cliente.

    • A resposta da API conterá um URL de retorno de chamada (redirecionamento) do OAuth, como: https://bedrock-agentcore.amazonaws.com/identities/callback/123-456-7890

      Registre esse valor, pois ele é específico para cada provedor criado e será necessário posteriormente pelo provedor de recursos do OAuth 2.0.

    • Acesse seu provedor de recursos (por exemplo, Google ou GitHub) e crie um cliente de aplicativo OAuth 2.0. Forneça a URL de retorno de chamada emitida pelo serviço da CreateOauth2CredentialProvider chamada para o provedor de recursos como uma URL de retorno de chamada permitida do OAuth 2.0.

    • Depois que o cliente do aplicativo OAuth 2.0 for criado, registre o ID do cliente e o segredo do cliente atribuídos ao seu cliente do aplicativo, pois você precisa atualizar o provedor de credenciais do OAuth 2.0 com esses valores.

    • Ligue UpdateOauth2CredentialProvider e forneça o ID do cliente e o segredo do cliente fornecidos pelo provedor de recursos, substituindo os valores de espaço reservado fornecidos ao criar o provedor de credenciais.

  4. Adicione um manipulador de código para chamadas CompleteResourceTokenAuth — Depois de criar seu provedor de credenciais do OAuth 2.0, adicione o código e as permissões do IAM para chamar a CompleteResourceTokenAuth API no manipulador de URL do seu aplicativo. Ao chamar a CompleteResourceTokenAuth API, seu aplicativo deve apresentar o token OAuth ou user_id String original do provedor de identidade de entrada que foi usado para gerar o token de acesso à carga de trabalho para representar o usuário e o aplicativo do agente envolvidos no fluxo de autorização do OAuth 2.0. Essas informações devem ser obtidas da sessão ativa do aplicativo no navegador do usuário (normalmente por meio de um cookie do navegador ou no armazenamento local do navegador) e NÃO devem ser retiradas de nenhum cache de sessão remota.

    Além disso, cada URL de autorização gerada pelo AgentCore Identity é identificada exclusivamente com sua própria URI de sessão. Esse URI de sessão também deve ser apresentado junto com o identificador do usuário para vincular a sessão ao usuário pretendido.

    Importante

    Antes de seu aplicativo chamar a CompleteResourceTokenAuth API, seu aplicativo deve verificar se o usuário atual tem uma sessão ativa e válida com seu aplicativo. Ao fazer isso, seu aplicativo pode associar o usuário pretendido à sessão de autorização. Além disso, se você tiver um serviço de back-end do qual seu aplicativo depende, você pode mover o código que chama a CompleteResourceTokenAuth API para seu back-end e fazer com que seu aplicativo encaminhe o token OAuth do provedor de identidade de entrada ou para seu back-end. user_id

    Exemplo de código do aplicativo:

    def _handle_3lo_callback(self, request: Request) -> JSONResponse: session_id = request.query_params.get("session_id") if not session_id: console.print("Missing session_id in OAuth2 3LO callback") return JSONResponse(status_code=400, content={"message": "missing session_id query parameter"}) session_details = validate_session_cookies(request.cookies.get('my-application-cookie')) user_id = None if oauth2_config: user_id = session_details.get(USER_ID) if not user_id: console.print(f"Missing {USER_ID} in session_details") return JSONResponse(status_code=500, content={"message": "Internal Server Error"}) console.print(f"Handling 3LO callback for workload_user_id={user_id} | session_id={session_id}", soft_wrap=True) region = agent_config.aws.region if not region: console.print("AWS Region not configured") return JSONResponse(status_code=500, content={"message": "Internal Server Error"}) identity_client = IdentityClient(region) identity_client.complete_resource_token_auth( session_uri=session_id, user_identifier=UserIdIdentifier(user_id=user_id) ) return JSONResponse(status_code=200, content={"message": "OAuth2 3LO flow completed successfully"})
  5. Teste — Depois de concluir a configuração, você estará pronto para testar a integração. Comece ligando GetResourceOauth2Token e, no seu navegador, acesse a URL de autorização que é retornada. Depois de concluir a autorização no provedor de recursos do OAuth 2.0, você verá o navegador redirecionar de volta para a URL do seu aplicativo e invocar a API. CompleteResourceTokenAuth Depois que o aplicativo retornar uma resposta válida, seu aplicativo de agente poderá recuperar os tokens de acesso do OAuth 2.0 que foram originalmente solicitados para o usuário. Esses tokens podem ser obtidos chamando a GetResourceOauth2Token API.

Considerações adicionais

Ao implementar a vinculação de sessão de URL de autorização do OAuth 2.0, lembre-se das seguintes considerações:

  • Cada URL de autorização e seu identificador de sessão correspondente são válidos somente por 10 minutos.

  • Para proteger o endpoint de retorno de chamada do seu aplicativo contra ataques de CSRF, é altamente recomendável que você gere um estado opaco para incluir na sua chamada de API. GetResourceOAuth2Token Seu aplicativo deve ser capaz de analisar esse valor para garantir que esteja atendendo às solicitações que foram iniciadas pelo seu aplicativo de agente.