{"id":71307,"date":"2020-02-24T22:18:55","date_gmt":"2020-02-24T19:18:55","guid":{"rendered":"https:\/\/prohoster.info\/blog\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt"},"modified":"2020-03-03T16:14:27","modified_gmt":"2020-03-03T13:14:27","slug":"identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt","title":{"rendered":"IdentityServer4. Conceitos b\u00e1sicos. OpenID Connect, OAuth 2.0 e JWT","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Com este post, quero abrir uma s\u00e9rie de artigos dedicados ao IdentityServer4. Come\u00e7aremos pelos conceitos b\u00e1sicos.<\/p>\n<p><\/p>\n<p>Atualmente, o protocolo de autentica\u00e7\u00e3o mais promissor \u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/openid.net\/connect\/\">OpenID Connect<\/a><\/noindex>, e o protocolo de autoriza\u00e7\u00e3o (concess\u00e3o de acesso) \u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/OAuth#OAuth_2.0\">OAuth 2.0<\/a><\/noindex>. <noindex><a rel=\"nofollow\" href=\"https:\/\/identityserver4.readthedocs.io\/en\/latest\/\">IdentityServer4<\/a><\/noindex> implementa esses dois protocolos. Ele \u00e9 otimizado para resolver <strong>problemas t\u00edpicos<\/strong> de seguran\u00e7a.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><noindex><a rel=\"nofollow\" href=\"https:\/\/openid.net\/connect\/\">OpenID Connect<\/a><\/noindex> \u2014 \u00e9 um protocolo e padr\u00e3o de autentica\u00e7\u00e3o, n\u00e3o concede acesso a recursos (Web API), mas como foi desenvolvido sobre o protocolo de autoriza\u00e7\u00e3o <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/OAuth#OAuth_2.0\">OAuth 2.0<\/a><\/noindex>, permite obter os par\u00e2metros do perfil do usu\u00e1rio como se voc\u00ea tivesse obtido acesso ao recurso <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.identityserver.io\/en\/latest\/endpoints\/userinfo.html\">UserInfo<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/JSON_Web_Token\">JWT<\/a><\/noindex> (JSON Web Token) \u00e9 um padr\u00e3o da web que define como transmitir dados sobre o usu\u00e1rio em formato JSON de forma criptografada.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc6749\">OAuth 2.0 (RFC 6749)<\/a><\/noindex> \u2014 \u00e9 um protocolo e padr\u00e3o de autoriza\u00e7\u00e3o. Ele permite que aplicativos acessem recursos protegidos, por exemplo, Web APIs.<\/p><\/blockquote>\n<p>Vamos dar uma olhada no diagrama de acesso a um recurso protegido e entender os passos principais e a terminologia aceita:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"IdentityServer4. Conceitos b\u00e1sicos. OpenID Connect, OAuth 2.0 e JWT\" src=\"\/wp-content\/uploads\/2020\/02\/0515b7bc9a4598c557189f8e5ff2c3f5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ol>\n<li>\n<p>O cliente solicita ao usu\u00e1rio permiss\u00e3o para se autenticar em seu nome. <strong>Cliente<\/strong> \u2014 \u00e9 um aplicativo cliente que acessa recursos protegidos em nome do propriet\u00e1rio dos recursos. <strong>Recurso<\/strong> \u2014 s\u00e3o todos os nossos servi\u00e7os protegidos <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/ru-ru\/aspnet\/core\/tutorials\/first-web-api?view=aspnetcore-3.1&amp;tabs=visual-studio\">Web API<\/a><\/noindex>.<\/p>\n<p>\n<\/li>\n<li>\n<p>O usu\u00e1rio permite que o aplicativo cliente se autentique em seu nome, por exemplo, inserindo um login e uma senha. O login e a senha servir\u00e3o como concess\u00e3o de autoriza\u00e7\u00e3o para o aplicativo cliente. <strong>Usu\u00e1rio (propriet\u00e1rio do recurso)<\/strong> \u2014 \u00e9 um programa ou pessoa que pode conceder acesso a recursos protegidos, por exemplo, inserindo um login (username) e uma senha (password);<\/p>\n<p>\n<\/li>\n<li>\n<p>O aplicativo cliente solicita um token de acesso ao <code>IdentityServer4<\/code> fornecendo informa\u00e7\u00f5es sobre si mesmo (<code>client_id<\/code>, <code>client_secret<\/code>), fornecendo a permiss\u00e3o de autoriza\u00e7\u00e3o do usu\u00e1rio (<code>nome de usu\u00e1rio<\/code>, <code>senha<\/code>) e fornecendo <code>grant_type<\/code> e <code>scope<\/code>. Em seguida, o servidor de autoriza\u00e7\u00e3o verifica a autenticidade do cliente e as credenciais do propriet\u00e1rio do recurso (login e senha). <\/p>\n<p><\/p>\n<blockquote><p>O protocolo OAuth 2.0 realiza a autentica\u00e7\u00e3o n\u00e3o apenas do usu\u00e1rio, mas tamb\u00e9m do aplicativo cliente que acessa os recursos. Para isso, o protocolo prev\u00ea par\u00e2metros como <strong>client_id<\/strong> e <strong>client_secret<\/strong>.<br \/>\n<strong>client_id<\/strong> \u2014 \u00e9 o identificador do aplicativo cliente, utilizado <code>IdentityServer4<\/code> para procurar informa\u00e7\u00f5es sobre o cliente.<br \/>\n<strong>client_secret<\/strong> \u00e9 o equivalente \u00e0 senha para o aplicativo cliente e \u00e9 usado para autenticar o aplicativo cliente na <code>IdentityServer4<\/code>. <strong>O segredo do cliente deve ser conhecido apenas pelo aplicativo e pela API<\/strong>. Com base no exposto, podemos concluir que <strong>IdentityServer4 deve estar ciente de seus clientes<\/strong>.<\/p><\/blockquote>\n<p>\n<\/li>\n<li>\n<p>Se a autenticidade do aplicativo for confirmada e a autoriza\u00e7\u00e3o for v\u00e1lida, <code>IdentiryServer4<\/code> cria <code>um token de acesso<\/code> (token de acesso) para o aplicativo e uma chave de atualiza\u00e7\u00e3o opcional (<code>refresh-token<\/code>). O processo de autoriza\u00e7\u00e3o est\u00e1 conclu\u00eddo. Se a solicita\u00e7\u00e3o for inv\u00e1lida ou n\u00e3o autorizada, o servidor de autoriza\u00e7\u00e3o retorna um c\u00f3digo com a mensagem de erro correspondente.<\/p>\n<p>\n<\/li>\n<li>\n<p>O aplicativo cliente solicita dados da API Web protegida, fornecendo o token de acesso para autoriza\u00e7\u00e3o. Se o c\u00f3digo de resposta do servidor de recursos <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP#401\">401<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP#403\">403<\/a><\/noindex> ou <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_HTTP_status_codes\">498<\/a><\/noindex>, o token de acesso usado para autentica\u00e7\u00e3o \u00e9 inv\u00e1lido ou expirou.<\/p>\n<p>\n<\/li>\n<li>\n<p>Se o token for v\u00e1lido, <code>Web API<\/code> fornece dados para o aplicativo.<\/p>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"_tipy-tokenov_\"><em>Tipos de tokens<\/em><\/h4>\n<p><\/p>\n<p>Clientes registrados t\u00eam permiss\u00e3o para solicitar <code>IdentityServer4<\/code> tokens de identidade, <code>IdentityServer4<\/code> <code>identidade<\/code>-token, <code>access<\/code>-token e <code>refresh<\/code>-token.<\/p>\n<p><\/p>\n<ul>\n<li><strong>token de identidade (identity-token)<\/strong> \u2014 \u00e9 o resultado do processo de autentica\u00e7\u00e3o. Cont\u00e9m o identificador do usu\u00e1rio e informa\u00e7\u00f5es sobre como e quando o usu\u00e1rio \u00e9 autenticado. Pode ser estendido com seus pr\u00f3prios dados.<\/li>\n<li><strong>token de acesso (access-token)<\/strong> \u2014 \u00e9 enviado para a API protegida e utilizado por ela para autoriza\u00e7\u00e3o (permiss\u00e3o de acesso) aos seus dados.<\/li>\n<li><strong>token de atualiza\u00e7\u00e3o (refresh-token)<\/strong> \u2014 \u00e9 um par\u00e2metro opcional que o servidor de autoriza\u00e7\u00e3o pode retornar em resposta ao pedido de um token de acesso.<\/li>\n<\/ul>\n<p><\/p>\n<p>Vamos introduzir mais dois conceitos:<\/p>\n<p><\/p>\n<p><strong>Authentication Server Url<\/strong> \u2014 \u00e9 o ponto final para obter a chave de acesso. Todos os pedidos para fornecer e renovar chaves de acesso ser\u00e3o direcionados para este URL.<\/p>\n<p><\/p>\n<p><strong>Resource Url<\/strong> \u2014 \u00e9 o URL do recurso protegido, ao qual se deve acessar, enviando a chave de acesso no cabe\u00e7alho de autoriza\u00e7\u00e3o.<\/p>\n<p><\/p>\n<h4 id=\"_zapros-klyucha-dostupa_\"><em>Solicita\u00e7\u00e3o de chave de acesso<\/em><\/h4>\n<p><\/p>\n<p>Para solicitar a chave de acesso, o cliente faz <code>POST<\/code> uma solicita\u00e7\u00e3o para o ponto final <code>IdentityServer4<\/code> com o seguinte cabe\u00e7alho<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">'Content-Type': 'application\/x-www-form-urlencoded',\n'Accept': 'application\/json',\n'Expect': '100-continue'<\/code><\/pre>\n<p><\/p>\n<p>e enviando os seguintes par\u00e2metros:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">'grant_type' : 'password',\n'username' : login,\n'password' : password,\n'scope' : 'scope',\n'client_id' : 'client_id',\n'client_secret' : '{client_secret}'<\/code><\/pre>\n<p><\/p>\n<p><code>nome de usu\u00e1rio<\/code>, <code>senha<\/code>, <code>client_id<\/code> e <code>client_secret<\/code> que foram analisados acima. Vamos analisar os outros par\u00e2metros:<\/p>\n<p><\/p>\n<p><strong>grant_type<\/strong> \u2014 tipo de concess\u00e3o ou tipo de autoriza\u00e7\u00e3o. O tipo de autoriza\u00e7\u00e3o depende do m\u00e9todo de solicita\u00e7\u00e3o de autoriza\u00e7\u00e3o usado pelo aplicativo, assim como dos tipos de autoriza\u00e7\u00e3o suportados pela API. No nosso caso, ele ter\u00e1 o valor <code>senha<\/code>, que de acordo com a especifica\u00e7\u00e3o <code>OAuth 2.0<\/code> corresponde \u00e0 concess\u00e3o de credenciais de acesso do propriet\u00e1rio do recurso (autoriza\u00e7\u00e3o por login e senha).<\/p>\n<p><\/p>\n<p>Protocolo <code>OAuth 2.0<\/code> define os seguintes tipos de concess\u00f5es que requerem <strong>intera\u00e7\u00e3o obrigat\u00f3ria com os usu\u00e1rios<\/strong>:<\/p>\n<p><\/p>\n<ul>\n<li><strong>c\u00f3digo de autoriza\u00e7\u00e3o (authorization code)<\/strong>. \u00c9 um dos tipos mais comuns de autoriza\u00e7\u00e3o, pois se adapta bem a aplica\u00e7\u00f5es servidoras (server-side applications), onde o c\u00f3digo-fonte do aplicativo e o segredo do cliente n\u00e3o est\u00e3o acess\u00edveis a terceiros;<\/li>\n<li><strong>impl\u00edcito (implicit)<\/strong>. O tipo impl\u00edcito de autoriza\u00e7\u00e3o \u00e9 utilizado por aplicativos m\u00f3veis e web, onde a privacidade do segredo do cliente n\u00e3o pode ser garantida;<\/li>\n<\/ul>\n<p><\/p>\n<p>E os tipos de concess\u00f5es que <strong>podem ser realizados sem intera\u00e7\u00e3o direta com os usu\u00e1rios<\/strong>:<\/p>\n<p><\/p>\n<ul>\n<li><strong>credenciais do propriet\u00e1rio do recurso (resource owner)<\/strong>. Esse tipo de autoriza\u00e7\u00e3o deve ser utilizado apenas quando o aplicativo cliente \u00e9 de confian\u00e7a do usu\u00e1rio e o usu\u00e1rio se sente \u00e0 vontade para inserir seu login e senha. Esse tipo de autoriza\u00e7\u00e3o deve ser usado somente quando outras op\u00e7\u00f5es n\u00e3o est\u00e3o dispon\u00edveis. Esse tipo de autoriza\u00e7\u00e3o \u00e9 conveniente para clientes corporativos que j\u00e1 utilizaram as credenciais dos usu\u00e1rios dentro de seu sistema e desejam migrar para <code>OAuth 2.0<\/code>.<\/li>\n<li><strong>credenciais do cliente<\/strong>. S\u00e3o utilizadas quando o aplicativo acessa a API. Isso pode ser \u00fatil, por exemplo, quando o aplicativo deseja atualizar suas pr\u00f3prias informa\u00e7\u00f5es de registro no servi\u00e7o ou URI de redirecionamento, ou acessar outras informa\u00e7\u00f5es armazenadas na conta do aplicativo no servi\u00e7o atrav\u00e9s da API do servi\u00e7o.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>scope<\/strong> \u00e9 um par\u00e2metro opcional. Ele define o escopo. O token de acesso retornado pelo servidor conceder\u00e1 acesso apenas aos servi\u00e7os que est\u00e3o dentro desse escopo. Ou seja, podemos combinar v\u00e1rios servi\u00e7os sob um \u00fanico escopo e, se o cliente receber a chave de acesso a esse escopo, ele obter\u00e1 acesso a todos esses servi\u00e7os. O escopo tamb\u00e9m pode ser usado para restringir os direitos de autoriza\u00e7\u00e3o (por exemplo, acesso somente leitura ou grava\u00e7\u00e3o)<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489354\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u043e\u043c \u044f \u0445\u043e\u0447\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0435\u0442\u043a\u0443 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u0443\u044e IdentityServer4. \u041d\u0430\u0447\u043d\u0435\u043c \u043c\u044b \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u043e\u043d\u044f\u0442\u0438\u0439. \u0421\u0430\u043c\u044b\u043c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f OpenID Connect, \u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (\u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f OAuth 2.0. IdentityServer4 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u044d\u0442\u0438 \u0434\u0432\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. \u041e\u043d \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. OpenID Connect \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043e\u043d \u043d\u0435 \u0434\u0430\u0435\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":71308,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-71307","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u043e\u043c \u044f \u0445\u043e\u0447\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0435\u0442\u043a\u0443 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u0443\u044e IdentityServer4.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47IdentityServer4. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f. OpenID Connect, OAuth 2.0 \u0438 JWT | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u043e\u043c \u044f \u0445\u043e\u0447\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0435\u0442\u043a\u0443 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u0443\u044e IdentityServer4.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-24T19:18:55+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47IdentityServer4. Conceitos principais. OpenID Connect, OAuth 2.0 e JWT | ProHoster","description":"Com este post, quero abrir uma s\u00e9rie de artigos dedicados ao IdentityServer4.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47IdentityServer4. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f. OpenID Connect, OAuth 2.0 \u0438 JWT | ProHoster","og:description":"\u042d\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u043e\u043c \u044f \u0445\u043e\u0447\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0435\u0442\u043a\u0443 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u0443\u044e IdentityServer4.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-24T19:18:55+00:00","article:modified_time":"2020-03-03T13:14:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"71307","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:04:25","updated":"2022-09-27 22:46:39","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/71307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=71307"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/71307\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/71308"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=71307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=71307"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=71307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}