
Setembro de 2008
Introdução
É um momento incrível para os desenvolvedores. Estamos começando a ver vários padrões abertos sendo adotados na Web. Como você sabe, o Google sempre foi um grande fã de padrões e de incentivar a comunidade de código aberto.
Recentemente, todas as APIs de dados do Google passaram a oferecer suporte ao OAuth, um protocolo aberto que visa padronizar a forma como os aplicativos para computador e Web acessam os dados particulares de um usuário. O OAuth oferece uma maneira de realizar a autenticação de API de forma padrão e segura. Como programadores, aprendemos a reutilizar o código sempre que possível. O OAuth ajuda os desenvolvedores a reduzir a quantidade de código duplicado que escrevem e facilita a criação de ferramentas que funcionam com vários serviços de diferentes provedores.
Público-alvo
Este artigo pressupõe que você conhece uma ou mais das APIs de dados do Google, mas não necessariamente os conceitos por trás do OAuth. Se você está começando ou apenas quer saber mais sobre o OAuth, não precisa procurar mais. Este artigo vai apresentar os conceitos básicos. Também vou discutir os detalhes da implementação do OAuth do Google.
Este documento também é destinado a desenvolvedores que já usam o AuthSub, principalmente no modo registrado com segurança avançada. Ao longo do texto, vou destacar as semelhanças e diferenças entre os dois protocolos. Se você tiver aplicativos que usam o AuthSub, use essas informações para migrar para o OAuth, um protocolo mais aberto e moderno.
Um pouco de terminologia
Para entender o OAuth, é preciso conhecer a terminologia dele. A especificação do OAuth e a documentação do Google sobre autenticação OAuth para aplicativos da Web (links em inglês) dependem muito de certas definições. Por isso, vamos esclarecer o que cada uma significa no contexto da implementação do OAuth do Google.
- "OAuth dance"
Meu termo não oficial para descrever o processo completo de autenticação/autorização do OAuth.
- Token de solicitação (OAuth)
Um token inicial que informa ao Google que seu aplicativo está solicitando acesso a uma das APIs de dados do Google. A segunda etapa da dança do OAuth é o usuário conceder acesso manualmente aos dados dele. Se esta etapa for concluída, o token de solicitação será autorizado.
- Token de acesso (OAuth)
A última etapa é trocar o token de solicitação autorizada por um token de acesso. Depois que o aplicativo tiver esse token, o usuário não precisará passar pelo processo do OAuth novamente, a menos que o token seja revogado.
Semelhança com o AuthSub:
Um token de acesso do OAuth é a mesma coisa que um token de sessão seguro do AuthSub. - Endpoints (OAuth)
São URIs necessários para autenticar um aplicativo e receber um token de acesso. São três no total, uma para cada etapa do processo do OAuth. Os endpoints do OAuth do Google são:
Receba um token de solicitação: https://www.google.com/accounts/OAuthGetRequestToken
Autorize o token de solicitação: https://www.google.com/accounts/OAuthAuthorizeToken
Fazer upgrade para um token de acesso: https://www.google.com/accounts/OAuthGetAccessToken
Semelhança com o AuthSub:
A troca de um token de solicitação autorizado por um token de acesso é análoga à atualização de um token do AuthSub de uso único para um token de sessão de longa duração emhttps://www.google.com/accounts/AuthSubRequestToken
ehttps://www.google.com/accounts/AuthSubSessionToken
, respectivamente. A diferença é que o AuthSub não tem o conceito de um token de solicitação inicial. Em vez disso, o usuário inicia o processo de token na página de autorizaçãoAuthSubRequestToken
. - Provedor de serviços (OAuth)
No caso das APIs de dados do Google, o provedor é o Google. Em geral, o provedor de serviços é usado para descrever o site ou serviço da Web que fornece os endpoints OAuth. Outro exemplo de provedor de serviços OAuth é o MySpace.
- Consumidor (OAuth)
O programa que solicita permissão para acessar os dados de um usuário (ou seja, seu aplicativo). O protocolo OAuth é flexível porque permite uma grande variedade de tipos de clientes diferentes (Web, instalados, desktop, dispositivos móveis).
Observação: embora o protocolo OAuth seja compatível com o caso de uso de aplicativos instalados/para computador, o Google só oferece suporte ao OAuth para aplicativos da Web.
Primeiros passos
Registro
Há uma pequena quantidade de configuração antes de começar a usar o OAuth com as APIs de dados do Google. Como todas as solicitações OAuth precisam ser assinadas digitalmente, primeiro registre seu domínio e faça upload de um certificado público para o Google. Consulte Registro para aplicativos baseados na Web e Geração de chaves e certificados para uso com o modo registrado para mais informações sobre como fazer isso.
Como assinar as solicitações
Depois que o domínio for registrado, você poderá começar a assinar solicitações. Um dos conceitos mais difíceis do OAuth é como construir corretamente o oauth_signature
e a noção da string de base da assinatura. A string de base são os dados que você assina com sua chave privada (usando RSA_SHA1
). O resultado é o valor definido para o oauth_signature
.
Exemplo de solicitação
GET
uma lista das agendas do Google de um usuário em http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime
Formato da string de base | base_string = http-method&base-http-request-url&normalized-string-of-oauth_parameters |
---|---|
Exemplo de string de base | GET&http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D4572616e48616d6d%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D137131200%26oauth_token%3D1%252Fab3cd9j4ks73hf7g%26oauth_version%3D1.0%26orderby%3Dstarttime |
Exemplo de solicitação HTTP |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: OAuth oauth_token="1%2Fab3cd9j4ks73hf7g", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9AvZbTSMK%2FPY%3D...", oauth_consumer_key="example.com", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d", oauth_version="1.0" |
Observação: isso é apenas uma representação. Seu oauth_signature
será muito mais longo.
Observações sobre a string de base:
- O parâmetro de consulta
orderby=starttime
é classificado com o restante dos parâmetrosoauth_*
na ordem lexicográfica de valor de byte. - Essa string também não contém um caractere "?".
- A parte
base-http-request-url
contém apenas o URL base codificado em URL:http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull
. - O
oauth_token
é codificado por URL duas vezes.
Observações sobre o cabeçalho Authorization
:
- A ordem dos parâmetros
oauth_*
não importa no cabeçalhoAuthorization
. - O cabeçalho não inclui o
orderby=starttime
como a string de base. Esse parâmetro de consulta é mantido como parte do URL da solicitação.
Para mais informações sobre como assinar solicitações usando o OAuth, consulte Assinatura de solicitações OAuth.
Diferença do AuthSub:
Como comparação, aqui está o mesmo exemplo usando o AuthSub seguro:
Formato da string de base | base_string = http-method http-request-URL timestamp nonce |
---|---|
Exemplo de string de base |
GET http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull%3Forderby%3Dstarttime 137131200 4572616e48616d6d |
Exemplo de solicitação HTTP |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: AuthSub token="GD32CMCL25aZ-v____8B" data="GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime 137131200 4572616e48616d6d" sig="MCwCFrV93K4agg==..." sigalg="rsa-sha1" |
Para mais informações sobre como assinar solicitações usando o AuthSub, consulte Assinar solicitações do AuthSub.
Ferramenta OAuth Playground
Finalidade
Alguns usuários sugeriram que o OAuth tem uma curva de aprendizado alta. Em comparação com outras APIs de autenticação do Google, concordo. A vantagem do OAuth fica evidente quando você expande seu app para usar outros serviços (que não são do Google). Escrever um único trecho de código de autenticação que funcione em diferentes provedores de serviços e APIs parece muito bom para mim. Você vai agradecer por aprender o protocolo agora.
O OAuth Playground é uma ferramenta que criei para ajudar os desenvolvedores a resolver problemas com o OAuth. Use o Playground para ajudar a depurar problemas, verificar sua própria implementação ou testar as APIs de dados do Google.
O que faz?
- Ilustra o fluxo de autenticação OAuth: busca de um token de solicitação, autorização do token e upgrade para um token de acesso.
- Mostra a string de base de assinatura correta para cada solicitação.
- Mostra o cabeçalho
Authorization
correto para cada solicitação. - Demonstra como usar um
oauth_token
para interagir com um feed de dados do Google autenticado. Você podeGET
/POST
/PUT
/DELETE
dados. - Acesse um feed autenticado diretamente no navegador.
- Permite testar seu próprio
oauth_consumer_key
(seu domínio registrado) e chave privada. - Descubra quais serviços de feed de dados do Google estão disponíveis para seu
oauth_token
.
Execução de demonstração
Etapa 1: escolher os escoposPrimeiro, decida quais APIs você quer usar escolhendo um ou mais escopos. Nesta demonstração, estou solicitando um token que vai funcionar com o Blogger e os Contatos do Google. Semelhança com o AuthSub: |
![]() |
Etapa 2: modificar parâmetros e configurações do OAuthPor enquanto, não modifique nenhuma configuração na caixa "Modificar os parâmetros do OAuth". Depois, você pode testar com sua própria chave privada. Para isso, mude o
Observação: Além de Diferença do AuthSub: |
![]() |
Etapas 3 a 5: adquirir o token de acessoHá três etapas para conseguir um token de acesso OAuth. A primeira etapa é recuperar um token de solicitação. Isso informa ao Google que seu aplicativo está iniciando a dança do OAuth. Primeiro, clique no botão "Solicitar token" na caixa "Receber o token". Alguns campos serão preenchidos com dados.
|
![]() ![]() |
Em seguida, clique no botão "Autorizar" na caixa "Receber o token". Nessa página de autorização, clique no botão "Conceder acesso" para autorizar o token de solicitação e ser redirecionado de volta ao OAuth Playground. Semelhança com o AuthSub: Diferença do AuthSub: Dica: especificar um URL |
![]() |
Por fim, clique no botão "Token de acesso" na caixa "Receber o token". Essa ação atualiza o rótulo do token de solicitação autorizado (indicado pelo "token de acesso" vermelho). Se quiser buscar um novo token, clique em "Começar de novo" para reiniciar a dança do OAuth. Agora podemos fazer algo interessante! |
![]() |
Como usar o token de acesso
Agora você pode consultar feeds, inserir, atualizar ou excluir dados. Tenha cuidado ao executar esses três últimos métodos HTTP, já que você está trabalhando com seus dados reais.
Dica: para descobrir os feeds disponíveis para seu token de acesso, clique no botão "Feeds disponíveis".
Exemplo de consulta: GET http://www.blogger.com/feeds/1982051675575479214/posts/default?max-results=3

Este exemplo não retorna mais de três postagens em um blog específico. Você também pode clicar no link "Ver no navegador" abaixo da área com destaque de sintaxe para conferir o feed/entrada retornado diretamente no navegador.
Exemplo: como atualizar uma postagem
- Localize o elemento
<link>
com um rel="edit" na postagem que você quer atualizar. que deve ser semelhante a este:<link rel="edit" href="http://www.blogger.com/feeds/1982051675575479214/posts/default/8138973184593279875"/>
Cole o URL href na entrada "Insira um feed de dados do Google".
- Copie o XML da entrada atual clicando em "Mostrar texto simples" na parte de cima do painel com destaque de sintaxe. Copie apenas o corpo da resposta, não os cabeçalhos.
- Mude o menu suspenso do método HTTP para
PUT
. - Clique em "Inserir dados de postagem" abaixo do menu suspenso e cole o XML
<entry>
no pop-up. - Clique no botão "Executar".
O servidor vai responder com um 200 OK
.
Dica: em vez de copiar manualmente o link edit
, desmarque a caixa de seleção "Destaque de sintaxe?". Depois de uma consulta, você poderá clicar nos links nos corpos de resposta XML.
Conclusão
Tecnologias como o protocolo de publicação AtomPub/Atom (protocolo subjacente das APIs de dados do Google) e o OAuth ajudam a impulsionar a Web. À medida que mais e mais sites começam a adotar esses padrões, nós, desenvolvedores, somos os vencedores. Criar um app incrível de repente se torna menos assustador.
Se tiver dúvidas ou comentários sobre o OAuth Playground ou o uso do OAuth com as APIs do Google, acesse o fórum de suporte das APIs do G Suite e do Marketplace.