Este tópico descreve como aplicativos móveis e de desktop acessam o Photo and Drive Service (PDS) usando OAuth 2.0.
1. Visão geral
Aplicativos móveis e de 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 acionar um aplicativo de autorização por meio de um URL scheme.
Um aplicativo de desktop para macOS, Linux ou Windows pode acionar a aplicação de autorização usando um endereço IP de loopback ou um URL scheme.
Alternativamente, sua aplicação pode usar WebView para enviar uma solicitação de autorização a um aplicativo web.
(1) Funcionamento
Fluxo de código de autorização: O processo é semelhante ao fluxo de código de autorização usado na integração de aplicativos de service web. A diferença é que a etapa de obtenção do token não exige o parâmetro secret, pois não há lado do servidor e o segredo não pode ser armazenado no cliente.
(2) Fluxograma

2. Preparação
(1) Crie um domínio
Primeiro, crie um domínio https://pds.console.alibabacloud.com no console oficial do PDS. Após a criação, o sistema fornecerá um nome de domínio de API de terceiro nível no formato https://{domainId}.api.aliyunpds.com.
(2) Ative a autenticação de usuário
O PDS oferece diversos métodos comuns de autenticação de usuário. Acesse diretamente o console do PDS para ativar a integração. Para mais detalhes, consulte Account access.
(3) Crie um aplicativo para usar como cliente OAuth no console do PDS
Crie um aplicativo nativo e especifique os escopos da aplicação. Esses escopos serão exibidos na página de consentimento. Depois de criar o aplicativo, obtenha o AppId e o AppSecret correspondentes. Eles funcionam como ClientId e ClientSecret para a autorização OAuth. Mantenha o ClientSecret em segurança.
(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>://<path>?<params>=<value>.
Utilize um endereço IP de loopback personalizado para aplicativos de desktop
Inicie um service web local para escutar em uma porta específica. 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 ainda não possua um AppId, crie um aplicativo no console do PDS para obtê-lo. |
|
redirect_uri |
Sim |
URI de redirecionamento: Indica ao service de autenticação para onde redirecionar após a conclusão do fluxo de autorização. Geralmente, trata-se de um URL scheme personalizado ou de um endereço IP de loopback fornecido pelo aplicativo cliente. Por exemplo: |
|
scope |
Sim |
A lista de escopos descreve as permissões de acesso necessárias para o aplicativo de service web e será exibida na página de consentimento do usuário. Consulte: Scopes. |
|
response_type |
Sim |
Valor fixo como " |
|
state |
Não, mas recomendado |
Se você especificar este parâmetro, o servidor de autorização do PDS retornará o valor intacto no URI de redirecionamento para evitar ataques de replay. Exemplo: |
|
login_type |
Sim |
Opções de login. Valores opcionais: |
|
hide_consent |
Não |
Defina se a página de consentimento deve aparecer após o primeiro login do usuário. Valores opcionais: |
|
lang |
Não |
Idioma exibido na interface do usuário. Atualmente suportados: |
Após o envio dessa solicitação, o service de autenticação do PDS orientará o usuário a fazer login. Depois que o usuário entrar, caso seja o primeiro acesso e o parâmetro hide_consent=true não tenha sido enviado, ele será redirecionado para a página de consentimento; caso contrário, o redirecionamento ocorre diretamente para o redirect_uri informado nos parâmetros da solicitação, por exemplo: pdshz001://callback/?code=xxxx&state=abc.
(2) Conceda permissões ao aplicativo na página de consentimento
Nesta etapa, o usuário decide se concede autorização ao aplicativo de service web. Se a autorização for negada, o fluxo é encerrado. Ao conceder a autorização, o sistema redireciona o usuário para o redirect_uri especificado na solicitação inicial, por exemplo: pdshz001://callback/?code=xxxx&state=abc.
(3) Troque o código de autorização por um token de acesso
Depois de 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 |
Código de autorização de uso único. |
|
client_id |
Sim |
AppId |
|
redirect_uri |
Sim |
URI de redirecionamento configurado para o seu aplicativo. |
|
grant_type |
Sim |
Defina o valor como authorization_code conforme as especificações OAuth 2.0. |
Resposta:
|
Parâmetro |
Localização |
Tipo |
Obrigatório |
Descrição |
|
access_token |
body |
String |
Sim |
O access_token gerado, válido por 2 horas. |
|
expires_time |
body |
String |
Sim |
Horário de expiração do access_token. |
|
expire_in |
body |
string |
Sim |
Período de validade do access_token, em segundos. |
|
token_type |
body |
String |
Sim |
O valor é Bearer. |
Exemplo de resposta de sucesso:
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token":"Aiasd76Y****...LSdyssd2",
"expires_time":"2019-11-11T10:10:10.009Z",
"expire_in": 7200,
"token_type":"Bearer",
"refresh_token":"LSLKdklksd...li3ew6"
}
A resposta desta solicitação segue a mesma estrutura da troca de código de autorização por token de acesso, mas não inclui o refresh_token.
Ignore os parâmetros opcionais presentes na resposta.
4. Chame operações da API do PDS
Use o token de acesso para chamar operações da API do PDS. Inclua o token de acesso no cabeçalho Authorization das solicitações de API.
Para mais detalhes sobre como realizar as chamadas, consulte Calling methods.
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 |
Token de atualização retornado durante a troca do código de autorização pelo token de acesso. |
|
client_id |
Sim |
AppId do seu aplicativo. |
|
grant_type |
Sim |
Defina o valor como refresh_token seguindo as especificações OAuth 2.0. |
|
client_secret |
Não |
AppSecret do seu aplicativo. Utilizado para autenticar a aplicação. |
(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 da resposta
Mesma estrutura de resposta descrita em (3) Exchange the authorization code for an access token.