用户认证 -- Jmix 文档()

  本篇文章为你整理了用户认证 :: Jmix 文档()的详细内容,包含有 用户认证 :: Jmix 文档,希望能帮助你了解 用户认证 :: Jmix 文档。

  如需使用 Jmix REST API 交互,需要经过 OAuth2 流程进行认证。下面的序列图解释了用 REST API 的一般交互过程:

  
首先,API 客户端需要使用认证请求获取一个访问 token。给 Jmix 发送一个 www-form-urlencoded 请求,请求的表单中包含 username 和 password:

  


POST http://localhost:8080/oauth/token

 

  Authorization: Basic {{client_id}} {{client_secret}} (1)

  Content-Type: application/x-www-form-urlencoded (2)

  grant_type=password (3)

   username={{username}} (4)

   password={{password}}

 

  
Token 只是用作临时的凭证/密码。一段时间之后,token 就会过期,你需要请求一个新的 token。一个方法是要求用户使用凭证再做一次常规的认证请求。

  
不要为了图方便在你的客户端应用程序中存储用户的 username 和 password,以便用户不用再次输入凭证。如果需要的话,应该再次要求用户输入,或者使用 refresh token 防止 token 过期。

  
最初的认证请求返回体中包含一个 refresh_token,可以用来创建新的访问 token。访问 token 的有效期相对比较短(Jmix 默认为 12 小时),而刷新 token 的有效期默认为 365 天。因此,可以刷新 token 非常适合用来做长期有效的凭证以获取新 token。

  
如需使用刷新 token 获取访问 token,可以用获取 token 的相同接口,但是 grant_type 不是 password 而是 refresh_token。下面是使用刷新 token 获取新访问 token 的示例:

  


POST http://localhost:8080/oauth/token

 

  Authorization: Basic {{client_id}} {{client_secret}}

  Content-Type: application/x-www-form-urlencoded

  grant_type=refresh_token (1)

   refresh_token=Hh2xCuZ7fgd35obagEBNGevF4ws= (2)

 

  
返回结果包含一个新的访问 token,具有新的过期时间。使用这种方式,在 token 过期后无需向用户索要凭证继续使用 API。

  
对不同场景的 Jmix API,有两种使用访问 token 进行认证的方式。我们先看第一种主要的使用方式:通过 HTTP 请求头提供。

  
收到访问 token 后就可以发起 REST API 请求。访问 token 要在每个请求头的 Authorization 中提供,示例:

  
访问 token 还可以用于 URL 查询参数中。主要用在 HTTP 请求头无法设置的情况。比如,提供浏览器中的文件链接,或者渲染图片时。

  
?access_token=CXE0w/9cOsnpSo8v2jEDoI8Qa3Y=

   fileRef=fs://2021/03/12/a3b6011d-9040-151e-7d17-f7ccdf75d72f.jpg?name=cat.jpg"

  /

 

 

  
默认情况下,所有的接口都需要先进行用户认证之后才能使用。但是也支持使用 Jmix 的匿名访问功能将某些 REST API 开放为匿名接口。此时,API 请求是通过用户 anonymous 发起的,此用户是 Jmix 应用程序默认自带的。

  
在没有使用 Authentication 请求头的情况下调用受保护的接口,会使用 anonymous 用户会话进行认证。

  


jmix.rest.anonymous-url-patterns = \

 

   /rest/services/productService/getProductInformation,\

   /rest/entities/Product,\

   /rest/entities/Product/*

 

  
上面配置的最后一行是必要的,因为如果是更新或者删除 Product 实体,URL 最后还有一部分是实体 ID。

  
如需提供对某些 实体 接口的匿名访问,请确保 anonymous 用户有访问这些实体的权限。可以创建一个 资源角色,然后在 DatabaseUserRepository.initAnonymousUser() 方法中为 anonymous 用户分配该角色。示例:

  


@ResourceRole(name = "AnonymousRestRole", code = AnonymousRestRole.CODE, scope = "API")

 

  public interface AnonymousRestRole {

   String CODE = "anonymous-rest-role";

   @EntityAttributePolicy(entityClass = Product.class,

   attributes = "*",

   action = EntityAttributePolicyAction.MODIFY)

   @EntityPolicy(entityClass = Product.class,

   actions = {EntityPolicyAction.READ, EntityPolicyAction.UPDATE})

   void product();

  }

 

  
@Component("UserRepository")

  public class DatabaseUserRepository extends AbstractDatabaseUserRepository User {

   // ...

   @Override

   protected void initAnonymousUser(User anonymousUser) {

   Collection GrantedAuthority authorities = getGrantedAuthoritiesBuilder()

   .addResourceRole(AnonymousRestRole.CODE)

   .build();

   anonymousUser.setAuthorities(authorities);

  }

 

 

  以上就是用户认证 :: Jmix 文档()的详细内容,想要了解更多 用户认证 :: Jmix 文档的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: