# 隐式许可

**隐式（Implicit）许可通常用于完全在用户浏览器中运行的纯JavaScript应用程序**。在其他授权类型中，用户与执行用户请求的客户端服务器进行通信，客户端服务器与受保护的下游服务进行交互。而在隐式授权类型中，所有服务交互直接发生在用户的客户端（通常是一个Web浏览器）上。

<figure><img src="https://3484936666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fkc3qks6b4rvNPb2C0khl%2Fuploads%2FQOw4NsS3t16R8HEFoHLc%2Ffile.excalidraw.svg?alt=media&#x26;token=b21edde2-03d8-4fa0-8114-666cc2990e8c" alt=""><figcaption></figcaption></figure>

使用**隐式（Implicit）许可类型**获取access token 的流程如下：

1. 在OAuth2授权服务上注册JavaScript应用程序。在注册时需要提供一个应用程序名称和一个回调URL，该URL将在用户的OAuth2访问令牌被重定向时使用。
2. JavaScript应用程序调用OAuth2服务。JavaScript应用程序必须提供一个预先注册的应用程序名称。然后，OAuth2服务器强制用户进行身份验证。
3. 如果用户成功进行身份验证，OAuth2服务不会返回一个令牌，而是将用户重定向回JavaScript应用程序所有者在步骤 1 中注册的页面。

   在重定向回用户的URL中，OAuth2访问令牌作为查询参数由OAuth2认证服务传递。
4. JavaScript应用程序接受传入请求并运行一个JavaScript脚本，解析OAuth2访问令牌并将其存储（通常作为Cookie）。
5. 每次调用受保护的资源时，OAuth2访问令牌都会被传递给被调用的服务。
6. 被调用的服务验证OAuth2令牌并检查用户是否被授权执行其尝试的活动。

> 关于OAuth2隐式许可类型，请记住以下几点：
>
> * 首先，隐式授权是唯一一种将OAuth2访问令牌直接暴露给公共客户端（Web浏览器）的授权类型。&#x20;
>   * 使用授权码许可类型时，客户端应用程序接收到OAuth2 授权服务器返回的授权码，客户端应用程序通过提交授权码来获取OAuth2令牌。返回的OAuth2令牌永远不会直接暴露给用户的浏览器。&#x20;
>   * 使用客户端凭证许可类型时，授权发生在两个基于服务器的应用程序之间；
>   * 而使用资源拥有者凭据许可类型时，请求服务的应用程序和服务都受到同一组织的信任和拥有。
> * 由隐式许可类型生成的OAuth2令牌更容易受到攻击和滥用，因为这些令牌对浏览器可见。
>   * 在浏览器中运行的任何恶意JavaScript都可以访问到OAuth2访问令牌并冒充用户调用服务。因此，隐式许可类型的OAuth2令牌应该是短暂的（1-2小时）。
>   * 由于OAuth2访问令牌存储在浏览器中，OAuth2规范不支持刷新令牌的概念，即无法自动续订令牌。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bohans.gitbook.io/ji-chu/spring/group-1/spring-cloud/securing/oauth2/yin-shi-xu-ke.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
