Este tópico descreve como aplicativos móveis e desktop acessam o Drive and Photo Service usando OAuth 2.0.
1. Visão geral
Aplicativos móveis e desktop são aplicações nativas. Não é seguro armazenar informações confidenciais, como AppSecrets, nesses aplicativos.
Um aplicativo móvel para Android ou iOS pode iniciar um aplicativo de autorização por meio de um URL scheme.
Um aplicativo desktop para macOS, Linux ou Windows pode iniciar um aplicativo de autorização usando um endereço IP de loopback ou um URL scheme.
Como alternativa, use WebView no seu aplicativo para enviar uma solicitação de autorização a um aplicativo web.
(1) Como funciona
Modo de código de autorização: o processo de acesso com código de autorização para aplicativos móveis ou desktop assemelha-se ao de aplicativos web. A única diferença é que não é necessário fornecer um AppSecret para obter um token de acesso, pois não há servidor web envolvido e o armazenamento de AppSecret em aplicativos móveis ou desktop é inseguro.
(2) Fluxograma

2. Preparações
(1) Crie um domínio
Crie um domínio no console do Drive and Photo Service. Após criar o domínio, você receberá um nome de domínio de API de quarto nível no formato https://{domainId}.api.aliyunpds.com.
(2) Ative o recurso de logon do sistema de usuários
O Drive and Photo Service oferece vários sistemas de usuários comuns para autenticação de logon. Ative esse recurso no console do Drive and Photo Service. Para mais informações, consulte Sistemas de usuários do PDS.
(3) Crie um aplicativo para usar como cliente OAuth no console do Drive and Photo Service
Crie um aplicativo nativo e especifique seus escopos, que aparecerão na página de consentimento. Após a criação, obtenha o AppId e o AppSecret correspondentes. O AppId e o AppSecret funcionam como ClientId e ClientSecret para a autorização OAuth. Essas credenciais servem para autorização e autenticação. Mantenha o AppSecret em sigilo.
(4) Planeje um URI de redirecionamento
Use um URL scheme personalizado aplicável a aplicativos Android ou iOS
Registre um URL scheme para identificar exclusivamente o aplicativo. O esquema segue este formato: <scheme domain name>://<path>?<params>=<value>.
Use um endereço IP de loopback personalizado aplicável a aplicativos desktop
Inicie um serviço web local para escutar em uma porta. Exemplo: http://127.0.0.1:3000/callback ou http://[::1]:3000.
3. Obtenha um token de acesso OAuth 2.0
(1) Chame a operação Authorize
Sintaxe da solicitação de API:
GET /v2/oauth/authorize?client_id=<appId>&redirect_uri=<redirect_uri>&scope=<scope>&login_type=<login_type>&state=[state]&prompt=[prompt] HTTP/1.1
Host: {domainId}.api.aliyunpds.com
|
Parâmetro |
Obrigatório |
Descrição |
|
client_id |
Sim |
O AppId do seu aplicativo. Caso não possua um AppId, crie um aplicativo no console do Drive and Photo Service para obtê-lo. |
|
redirect_uri |
Sim |
O URI para o qual o servidor de autorização do Drive and Photo Service redireciona os usuários após concluir o processo de autorização. Defina este parâmetro como o URL scheme ou endereço IP de loopback fornecido pelo aplicativo. Exemplo: |
|
scope |
Sim |
Os escopos que definem as permissões necessárias para o seu aplicativo. Eles aparecem na página de consentimento. Para mais detalhes, consulte Authorize. |
|
response_type |
Sim |
O tipo de resposta. Defina o valor como |
|
state |
Não, mas recomendado |
Se especificado, o servidor de autorização do Drive and Photo Service retorna esse valor intacto no URI de redirecionamento para evitar ataques de replay. Exemplo: |
|
login_type |
Sim |
O método de logon. Valores válidos: |
|
hide_consent |
Não |
Define se a página de consentimento será exibida no primeiro logon do usuário. Valores válidos: |
|
lang |
Não |
O idioma de exibição da página. Valores válidos: |
Quando um usuário envia essa solicitação, o servidor de autorização do Drive and Photo Service solicita que ele faça logon. Se for o primeiro acesso e o parâmetro hide_consent não estiver definido como true, o servidor redireciona o usuário para a página de consentimento. Caso contrário, o redirecionamento ocorre diretamente para o URI definido no parâmetro redirect_uri. Exemplo: pdshz001://callback/?code=xxxx&state=abc.
(2) Conceda permissões ao aplicativo na página de consentimento
Na página de consentimento, o usuário decide se concede as permissões solicitadas ao aplicativo. Se recusar, o processo termina. Ao concordar, o servidor de autorização do Drive and Photo Service redireciona o usuário para o URI especificado no parâmetro redirect_uri. Exemplo: pdshz001://callback/?code=xxxx&state=abc.
(3) Troque o código de autorização por um token de acesso
Após obter o código de autorização, chame a operação Token para trocá-lo por um token de acesso.
Sintaxe da solicitação de API:
POST /v2/oauth/token HTTP/1.1
Host: {domainId}.api.aliyunpds.com
Content-Type: application/x-www-form-urlencoded
code=xxx\
&client_id=your_app_id\
&redirect_uri=pdshz001://callback\
&grant_type=authorization_code
|
Parâmetro |
Obrigatório |
Descrição |
|
code |
Sim |
O código de autorização único. |
|
client_id |
Sim |
O AppId do seu aplicativo. |
|
redirect_uri |
Sim |
O URI de redirecionamento configurado para o seu aplicativo. |
|
grant_type |
Sim |
Defina o valor como authorization_code conforme as especificações OAuth 2.0. |
Parâmetros de resposta
|
Parâmetro |
Localização |
Tipo |
Obrigatório |
Descrição |
|
access_token |
body |
STRING |
Sim |
O token de acesso gerado, válido por duas horas. |
|
expires_time |
body |
STRING |
Sim |
O período de validade do token de acesso. |
|
expire_in |
body |
STRING |
Sim |
O tempo restante de validade do token de acesso. Unidade: segundos. |
|
token_type |
body |
STRING |
Sim |
Valor fixo: Bearer. |
Exemplo de resposta bem-sucedida:
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token":"Aiasd76YSo23...LSdyssd2",
"expires_time":"2019-11-11T10:10:10.009Z",
"expire_in": 7200,
"token_type":"Bearer",
"refresh_token":"LSLKdklksd...li3ew6"
}
A resposta desta solicitação é idêntica à retornada ao obter o token de acesso via código de autorização, exceto pela ausência do parâmetro refresh_token.
Ignore os parâmetros opcionais na resposta.
4. Chame operações da API do Drive and Photo Service
Use o token de acesso para chamar operações da API do Drive and Photo Service. Inclua o token de acesso no cabeçalho Authorization das solicitações de API.
Para mais informações, consulte Método de chamada.
5. Atualize o token de acesso
(1) Sintaxe da solicitação de API
POST /v2/oauth/token HTTP/1.1
Host: {domainId}.api.aliyunpds.com
Content-Type: application/x-www-form-urlencoded
refresh_token=xxx\
&client_id=xxx\
&grant_type=refresh_token
Parâmetros da solicitação
|
Parâmetro |
Obrigatório |
Descrição |
|
refresh_token |
Sim |
O token de atualização retornado durante a troca do código de autorização pelo token de acesso. |
|
client_id |
Sim |
O AppId do seu aplicativo. |
|
grant_type |
Sim |
O tipo de método de concessão. Defina o valor como refresh_token conforme as especificações OAuth 2.0. |
|
client_secret |
Não |
O AppSecret do seu aplicativo, usado para autenticar o aplicativo. |
(2) Resposta
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token":"xxxxxxxxx",
"expires_in":3920,
"expire_time":"2019-11-11T10:10:10.009Z",
"token_type":"Bearer"
}
Parâmetros de resposta
A estrutura da resposta para uma solicitação de atualização de token de acesso é igual à da solicitação para trocar um código de autorização por um token de acesso.