Table of Contents
Propriedades arbitrárias podem ser associadas a um token de acesso.
Aqui propriedade é um objeto JSON que tem entradas nomeadas key
e value
. Os tipos dos valores de entrada são string. Literalmente key
representa a chave da propriedade e value
representa o valor da propriedade.
O JSON abaixo é um exemplo de uma propriedade cuja chave e valor são example_parameter
e example_value
respectivamente.
{
"key":"example_parameter",
"value":"example_value"
}
Por exemplo, se a propriedade acima estiver associada a um token de acesso, uma resposta de token de acesso do seu servidor de autorização será semelhante aos exemplos abaixo.
Exemplo em Fluxo Implícito
Location: http://localhost:8880/api/mock/redirection/5593494639
#access_token=pNj1h24a4geA_YHilxrshkRkxJDsyXBZWKp3hZ5ND7A
&token_type=Bearer&expires_in=86400&scope=
&example_parameter=example_value
Exemplo no Fluxo de Código de Autorização
{
"access_token":"pNj1h24a4geA_YHilxrshkRkxJDsyXBZWKp3hZ5ND7A",
"token_type":"Bearer",
"expires_in":86400,
"scope":null,
"example_parameter":"example_value"
}
Como você pode ver, uma propriedade, example_parameter=example_value
, está incluído no redirecionamento URI em “Exemplo em Fluxo Implícito” e no JSON em “Exemplo no Fluxo de Código de Autorização”. O imóvel é passado para a solicitação do cliente. No entanto, pode haver alguns casos em que você deseja associar propriedades a um token de acesso, mas não quer mostrá-las ao aplicativo do cliente. Nesse caso, adicione hidden=true
Como abaixo quando você prepara uma propriedade.
{
"key":"example_parameter",
"value":"example_value",
"hidden":true
}
As propriedades associadas a um token de acesso podem ser obtidas usando a API /api/auth/introspection API (que é a API para obter informações sobre um token de acesso). Uma resposta da API de introspecção contém propriedades associadas no formato como mostrado abaixo.
{
"type":"introspectionResponse",
"resultCode":"A056001",
"resultMessage":"[A056001] The access token is valid.",
"action":"OK",
"clientId":5008706718,
"existent":true,
"expiresAt":1461369117000,
"properties":[
{
"hidden":false,
"key":"example_parameter",
"value":"example_value"
}
],
"refreshable":false,
"responseContent":"Bearer error=\"invalid_request\"",
"subject":"user123",
"sufficient":true,
"usable":true
}
Observe que a resposta da API de introspecção da Authlete é diferente do formato definido em RFC 7662 Ver 4. Token de acesso introspect em Authlete Definitivo Guia para detalhes.
[["example_parameter","example_value",null]]
). O valor do oculto é convertido em uma sequência nula ou vazia. Significam falsos e verdadeiros, respectivamente."[[\"example_parameter\":\"example_value\",null]]"
)Passe uma solicitação de um cliente para um ponto final de autorização, "client_id=5008706718&response_type=token"
Para /auth/authorization
API.
curl -s -v \
--user 5593494639:AAw0rner_-y1A6J9s20wjRCpkBvez3GxEBoL9jOJVR0 \
http://localhost:8880/api/auth/authorization \
-d "parameters=client_id%3D5008706718%26response_type%3Dtoken"
Extrair o valor de ticket
da longa resposta JSON. O ticket
é usado para chamar /auth/authorization/issue
API mais tarde.
Emita um token de acesso ligando /auth/authorization/issue
API. Aqui, especifique propriedades para associar a um token de acesso usando properties
parâmetro.
curl -s -v \
--user 5593494639:AAw0rner_-y1A6J9s20wjRCpkBvez3GxEBoL9jOJVR0 \
http://localhost:8880/api/auth/authorization/issue \
-H 'Content-Type:application/json' \
-d "{\"ticket\":\"1iIR-GMmBLLQLC-tJ70Wmb83UKAB2V8WnhwsVWlGJr8\",\"subject\":\"user123\",\"properties\":[{\"key\":\"example_parameter\",\"value\":\"example_value\"}]}"
Uma resposta JSON como abaixo é devolvida.
{
"type":"authorizationIssueResponse",
"resultCode":"A040001",
"resultMessage":"[A040001] The authorization request was processed successfully.",
"action":"LOCATION",
"responseContent":"http://localhost:8880/api/mock/redirection/5593494639#access_token=pNj1h24a4geA_YHilxrshkRkxJDsyXBZWKp3hZ5ND7A&token_type=Bearer&expires_in=86400&scope=&example_parameter=example_value"
}
Como o valor de action
contido na resposta acima de /auth/autorização/emissão API é LOCATION
, status HTTP “302 Encontrado” deve ser devolvido ao aplicativo do cliente. Quando o valor de action
contido em uma resposta de /auth/autorização/emissão API é LOCATION
, o valor de responseContent
é o valor que deve ser usado como o valor do cabeçalho LOCAL HTTP. Usando essas informações, uma resposta como abaixo deve ser devolvida ao aplicativo do cliente.
HTTP/1.1 302 Found
Location: http://localhost:8880/api/mock/redirection/5593494639
#access_token=pNj1h24a4geA_YHilxrshkRkxJDsyXBZWKp3hZ5ND7A
&token_type=Bearer&expires_in=86400&scope=
&example_parameter=example_value
Cache-Control: no-store
Pragma: no-cache
Observe que esta resposta contém example_parameter=example_value
como um parâmetro adicional.
Informações sobre o token de acesso emitido podem ser obtidas ligando para a API/AUTH/Introspection API abaixo.
curl -s -v \
--user 5593494639:AAw0rner_-y1A6J9s20wjRCpkBvez3GxEBoL9jOJVR0 \
http://localhost:8880/api/auth/introspection \
-d token=pNj1h24a4geA_YHilxrshkRkxJDsyXBZWKp3hZ5ND7A
Abaixo está um exemplo da API de introspecção.
{
"type":"introspectionResponse",
"resultCode":"A056001",
"resultMessage":"[A056001] The access token is valid.",
"action":"OK",
"clientId":5008706718,
"existent":true,
"expiresAt":1461369117000,
"properties":[
{
"hidden":false,
"key":"example_parameter",
"value":"example_value"
}
],
"refreshable":false,
"responseContent":"Bearer error=\"invalid_request\"",
"subject":"user123",
"sufficient":true,
"usable":true
}
Passe uma solicitação de um cliente para um ponto final de autorização, "client_id=5008706718&response_type=code"
Para /auth/authorization
API.
curl -s -v \
--user 5593494639:AAw0rner_-y1A6J9s20wjRCpkBvez3GxEBoL9jOJVR0 \
http://localhost:8880/api/auth/authorization \
-d "parameters=client_id%3D5008706718%26response_type%3Dcode"
Extrair o valor de ticket
da longa resposta JSON. O ticket
é usado para chamar /auth/authorization/issue
API mais tarde.
Emita um código de autorização ligando /auth/authorization/issue
API. Aqui, especifique propriedades para associar a um código de autorização usando o parâmetro de propriedades. As propriedades especificadas serão finalmente associadas a um token de acesso. Observe que propriedades adicionais podem ser passadas para /auth/token
API que será chamada mais tarde, também. Portanto, no fluxo de código de autorização, as propriedades não necessariamente têm que ser dadas a /auth/authorization/issue
API mesmo que as propriedades precisem ser associadas a um token de acesso.
curl -s -v \
--user 5593494639:AAw0rner_-y1A6J9s20wjRCpkBvez3GxEBoL9jOJVR0 \
http://localhost:8880/api/auth/authorization/issue \
-H 'Content-Type:application/json' \
-d "{\"ticket\":\"xKdGvPyPkLJRkmP6MSAJ1wISBmdnSbPG8pFzgTdZh4U\",\"subject\":\"user123\",\"properties\":[{\"key\":\"example_parameter\",\"value\":\"example_value\"}]}"
Um JSON como abaixo é devolvido.
{
"type":"authorizationIssueResponse",
"resultCode":"A040001",
"resultMessage":"[A040001] The authorization request was processed successfully.",
"action":"LOCATION",
"responseContent":"http://localhost:8880/api/mock/redirection/5593494639?code=n96DtM32eV8maSG5Z3_p3qhAT7zuvuqlAaizOmDInZ4"
}
Como o valor de action
contido na resposta acima de /auth/authorization/issue
API é LOCATION
, status HTTP “302 Encontrado” deve ser devolvido ao aplicativo do cliente. Quando o valor de action
contido em uma resposta de /auth/authorization/issue
API é LOCATION
, o valor de responseContent
é o valor que deve ser usado como o valor do cabeçalho LOCAL HTTP. Usando essas informações, uma resposta como abaixo deve ser devolvida ao aplicativo do cliente.
HTTP/1.1 302 Found
Location: http://localhost:8880/api/mock/redirection/5593494639?code=n96DtM32eV8maSG5Z3_p3qhAT7zuvuqlAaizOmDInZ4
Cache-Control: no-store
Pragma: no-cache
Passe uma solicitação de um cliente para um ponto final de token, "code=n96DtM32eV8maSG5Z3_p3qhAT7zuvuqlAaizOmDInZ4&grant_type=authorization_code"
Para /auth/token
API. Observe que uma propriedade adicional para associar a um token de acesso, additional_parameter=additional_value
, é especificado aqui. Se houver nomes de chaves duplicados em propriedades passadas para /auth/autho
rization/emissão de API e aqueles passados para /auth/token
API, aqueles passados para /auth/token
A API substituirá aqueles que passaram para /auth/authorization/issue
API.
curl -s -v \
--user 5593494639:AAw0rner_-y1A6J9s20wjRCpkBvez3GxEBoL9jOJVR0 \
http://localhost:8880/api/auth/token \
-H 'Content-Type:application/json' \
-d "{\"parameters\":\"code=n96DtM32eV8maSG5Z3_p3qhAT7zuvuqlAaizOmDInZ4&grant_type=authorization_code\",\"properties\":[{\"key\":\"additional_parameter\",\"value\":\"additional_value\"}]}"
Um JSON como abaixo é devolvido.
{
"type":"tokenResponse",
"resultCode":"A050001",
"resultMessage":"[A050001] The token request (grant_type=authorization_code) was processed successfully.",
"action":"OK",
"responseContent":"{\"access_token\":\"xuc8cd1zf9TpdMwiB7sfLcPmY6DHpYIpz1jyo9a0YXs\",\"additional_parameter\":\"additional_value\",\"refresh_token\":\"66fIuQ33usvJ9ZSDrnUv2KQnC946Kr4Cj8n8bcjlpTI\",\"example_parameter\":\"example_value\",\"scope\":null,\"token_type\":\"Bearer\",\"expires_in\":86400}"
}
Como o valor de action
contido na resposta acima de /auth/token
API é OK
, o status HTTP “200 OK” deve ser devolvido ao aplicativo do cliente. Quando o valor de action
contido em uma resposta de /auth/token
API é OK
, o valor de responseContent
é o valor que deve ser usado como o valor do corpo de resposta. Usando essas informações, uma resposta como abaixo deve ser devolvida ao aplicativo do cliente.
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"xuc8cd1zf9TpdMwiB7sfLcPmY6DHpYIpz1jyo9a0YXs",
"additional_parameter":"additional_value",
"refresh_token":"66fIuQ33usvJ9ZSDrnUv2KQnC946Kr4Cj8n8bcjlpTI",
"example_parameter":"example_value",
"scope":null,
"token_type":"Bearer",
"expires_in":86400
}
Nesta resposta, a propriedade dada a /auth/authorization/issue
API (example_parameter=example_value
) e a propriedade dada a /auth/token
API (additional_parameter=additional_value
) estão contidos.
Passe uma solicitação de um cliente para um ponto final de token, grant_type=client_credentials&client_id=5008706718
, para /api/auth/token API. Usar properties
parâmetro para especificar propriedades para associar a um token de acesso. Observe que o tipo de cliente do aplicativo do cliente deve ser confidencial para usar o Fluxo de Credenciais do Cliente.
curl -s -v \
--user 5593494639:AAw0rner_-y1A6J9s20wjRCpkBvez3GxEBoL9jOJVR0 \
http://localhost:8880/api/auth/token \
-H 'Content-Type:application/json' \
-d "{\"parameters\":\"grant_type=client_credentials&client_id=5008706718&client_secret=zVI5JjIKw4W2XIF7o8GLzaUOs4jAx_OhuWf7ol-lAMpMrzm574zmnhgzOTDApSHgUD4LKv41aD43p0gU4Hz67w\",\"properties\":[{\"key\":\"example_parameter\",\"value\":\"example_value\"}]}"
Um JSON como abaixo é devolvido.
{
"type":"tokenResponse",
"resultCode":"A052001",
"resultMessage":"[A052001] The token request (grant_type=client_credentials) was processed successfully.",
"action":"OK",
"responseContent":"{\"access_token\":\"8PKs66MYc1nRVUcdE5wmEr3gn3lQ9FtcxRQWY3ts-fw\",\"example_parameter\":\"example_value\",\"scope\":null,\"token_type\":\"Bearer\",\"expires_in\":86400}"
}
Como o valor de action
contido na resposta acima da API/Auth/token é OK
, o status HTTP “200 OK” deve ser devolvido ao aplicativo do cliente. Quando o valor de action
contido em uma resposta de /api/auth/token API é OK
, o valor de responseContent
é o valor que deve ser usado como o valor do corpo de resposta. Usando essas informações, uma resposta como abaixo deve ser devolvida ao aplicativo do cliente.
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"8PKs66MYc1nRVUcdE5wmEr3gn3lQ9FtcxRQWY3ts-fw",
"example_parameter":"example_value",
"scope":null,
"token_type":"Bearer",
"expires_in":86400
}
No Fluxo de Credenciais do Cliente, um token de atualização (refresh_token
) não é emitido. Ver RFC 6749 para detalhes.
Passe uma solicitação de um cliente para um ponto final de token, grant_type=password&client_id=5008706718&username=u&password=p
Para /auth/token
API. Quando grant_type
É password
, o valor do parâmetro de propriedades dado a /auth/token
A API é simplesmente descartada. Então, não está especificado aqui. Em vez disso, o parâmetro de propriedades é usado mais tarde quando /auth/token/issue
API é chamada. Note que /auth/token/issue
A API existe apenas para grant_type=password
.
curl -s -v \
--user 5593494639:AAw0rner_-y1A6J9s20wjRCpkBvez3GxEBoL9jOJVR0 \
http://localhost:8880/api/auth/token \
-H 'Content-Type:application/json' \
-d "{\"parameters\":\"grant_type=password&client_id=5008706718&username=u&password=p\"}"
Um JSON como abaixo é devolvido.
{
"type":"tokenResponse",
"resultCode":"A051001",
"resultMessage":"[A051001] Authlete has successfully issued a ticket to the service (API Key = 5593494639) for the token request from the client (ID = 5008706718). [grant_type=password]",
"action":"PASSWORD",
"password":"p",
"ticket":"qdPziRKfjuHkaTbCQ5r0lBeR3pwJxCnEKrdPv5zbfRI",
"username":"u"
}
Quando o valor de action
em uma resposta de /auth/token
API é PASSWORD
, isso significa que o Fluxo de Credenciais de Senha do Proprietário de Recursos está sendo usado. Neste caso, como primeiro passo, a autenticação do usuário precisa ser realizada usando username
e password
apresentado pelo aplicativo do cliente. Os valores de username
parâmetro e password
parâmetro na solicitação de token original estão contidos em uma resposta de /auth/token
API sem qualquer modificação. No exemplo acima, o valor de username
É u
e o de password
É p
.
Como resultado da autenticação do usuário, o identificador exclusivo do usuário deve ser determinado. Chamar /auth/token/issue
API com o identificador único como o valor de subject
parâmetro. Além disso, a chamada API requer ticket
que foi emitido a partir de /auth/token
API com antecedência. Se algumas propriedades precisarem ser associadas a um token de acesso, properties
parâmetro de solicitação deve ser adicionado, também.
curl -s -v \
--user 5593494639:AAw0rner_-y1A6J9s20wjRCpkBvez3GxEBoL9jOJVR0 \
http://localhost:8880/api/auth/token/issue \
-H 'Content-Type:application/json' \
-d "{\"ticket\":\"qdPziRKfjuHkaTbCQ5r0lBeR3pwJxCnEKrdPv5zbfRI\",\"subject\":\"user123\",\"properties\":[{\"key\":\"example_parameter\",\"value\":\"example_value\"}]}"
Um JSON como abaixo é devolvido.
{
"type":"tokenIssueResponse",
"resultCode":"A054001",
"resultMessage":"[A054001] The token request (grant_type=password) was processed successfully.",
"action":"OK",
"responseContent":"{\"access_token\":\"jUmm2CSQGHb4OuUIGabdsqL1S0KNJWlZrP5lDNDEWX0\",\"refresh_token\":\"Q4OAafrltI5khG0Ur6c6XuJVQ1IU5Tjrk2sqD2sfKCo\",\"example_parameter\":\"example_value\",\"scope\":null,\"token_type\":\"Bearer\",\"expires_in\":86400}"
}
Como o valor de action
contido na resposta acima de /auth/token/issue
API é OK
, o status HTTP “200 OK” deve ser devolvido ao aplicativo do cliente. Quando o valor de action
contido em uma resposta de /auth/token/issue
API é OK
, o valor de responseContent
é o valor que deve ser usado como o valor do corpo de resposta. Usando essas informações, uma resposta como abaixo deve ser devolvida ao aplicativo do cliente.
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"jUmm2CSQGHb4OuUIGabdsqL1S0KNJWlZrP5lDNDEWX0",
"refresh_token":"Q4OAafrltI5khG0Ur6c6XuJVQ1IU5Tjrk2sqD2sfKCo",
"example_parameter":"example_value",
"scope":null,
"token_type":"Bearer",
"expires_in":86400
}
Passe uma solicitação de um cliente para um ponto final de token, refresh_token=66fIuQ33usvJ9ZSDrnUv2KQnC946Kr4Cj8n8bcjlpTI&grant_type=refresh_token
Para /auth/token
API. As propriedades para associar a um token de acesso devem ser especificadas usando properties
parâmetro. Neste exemplo, a propriedade é extra_parameter=extra_value
e isso é um pouco diferente das propriedades de exemplo usadas até agora.
curl -s -v \
--user 5593494639:AAw0rner_-y1A6J9s20wjRCpkBvez3GxEBoL9jOJVR0 \
http://localhost:8880/api/auth/token \
-H 'Content-Type:application/json' \
-d "{\"parameters\":\"refresh_token=66fIuQ33usvJ9ZSDrnUv2KQnC946Kr4Cj8n8bcjlpTI&grant_type=refresh_token\",\"properties\":[{\"key\":\"extra_parameter\",\"value\":\"extra_value\"}]}"
Um JSON como abaixo é devolvido.
{
"type":"tokenResponse",
"resultCode":"A053001",
"resultMessage":"[A053001] The token request (grant_type=refresh_token) was processed successfully.",
"action":"OK",
"responseContent":"{\"access_token\":\"KQfuhsimWoOaTZVRYbzh166pqK49hQyNMGTbbN8UfUY\",\"additional_parameter\":\"additional_value\",\"refresh_token\":\"CdcL3Ixx5EIn2KK3ChDKUgoY_nf-1rHad7Z8Xk_O5s0\",\"example_parameter\":\"example_value\",\"extra_parameter\":\"extra_value\",\"scope\":null,\"token_type\":\"Bearer\",\"expires_in\":86400}"
}
Quando grant_type
É refresh_token
, propriedades passadas para /auth/token
As API são tratadas como propriedades adicionais para o token de acesso que é acoplado com o token de atualização apresentado. O valor de refresh_token
parâmetro no exemplo acima é o token de atualização que foi emitido como resultado de “4. Como simular o fluxo de código de autorização por cacho”. E o token de acesso que está associado ao token de atualização já tem duas propriedades, example_parameter=example_value
e additional_parameter=additional_value
. Portanto, como resultado da adição extra_parameter=extra_value
em /auth/token
Chamada de API, um token de acesso recém-emitido terá três propriedades.
Como o valor de action
contido na resposta acima de /auth/token
API é OK
, o status HTTP “200 OK” deve ser devolvido ao aplicativo do cliente. Quando o valor de action
contido em uma resposta de /auth/token
API é OK
, o valor de responseContent
é o valor que deve ser usado como o valor do corpo de resposta. Usando essas informações, uma resposta como abaixo deve ser devolvida ao aplicativo do cliente.
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"KQfuhsimWoOaTZVRYbzh166pqK49hQyNMGTbbN8UfUY",
"additional_parameter":"additional_value",
"refresh_token":"CdcL3Ixx5EIn2KK3ChDKUgoY_nf-1rHad7Z8Xk_O5s0",
"example_parameter":"example_value",
"extra_parameter":"extra_value",
"scope":null,
"token_type":"Bearer",
"expires_in":86400
}
Passando o token de acesso recém-emitido para a API de introspecção:
curl -s -v \
--user 5593494639:AAw0rner_-y1A6J9s20wjRCpkBvez3GxEBoL9jOJVR0 \
http://localhost:8880/api/auth/introspection \
-d token=KQfuhsimWoOaTZVRYbzh166pqK49hQyNMGTbbN8UfUY
resultará em uma resposta como abaixo. Três propriedades estão incorporadas na resposta.
{
"type":"introspectionResponse",
"resultCode":"A056001",
"resultMessage":"[A056001] The access token is valid.",
"action":"OK",
"clientId":5008706718,
"existent":true,
"expiresAt":1461519667000,
"properties":[
{
"hidden":false,
"key":"example_parameter",
"value":"example_value"
},
{
"hidden":false,
"key":"additional_parameter",
"value":"additional_value"
},
{
"hidden":false,
"key":"extra_parameter",
"value":"extra_value"
}
],
"refreshable":true,
"responseContent":"Bearer error=\"invalid_request\"",
"subject":"user123",
"sufficient":true,
"usable":true
}