访问控制
保护 REST 端点
对 REST API 端点的访问可以使用 access token 进行保护。授权服务(Authorization Server)扩展组件可以用来获取 access token。参阅 授权服务 扩展组件的文档了解详情。
匿名访问
某些 REST API 端点可以作为无需认证的接口开放,使用 Jmix 的匿名访问功能。此时,API 请求是通过 anonymous
用户进行,这个用户是 Jmix 应用默认配置的。
对于没有使用 Authentication
请求头调用任何安全端点,都会使用 anonymous
用户进行认证。
参阅 基于 Token 的验证 了解定义匿名资源的访问。最简便的方式是使用应用程序属性配置,URL pattern 以逗号隔开。
jmix.resource-server.anonymous-url-patterns = \
/rest/services/productService/getProductInformation,\
/rest/entities/Product/**
配置完成后,可以不使用 Authentication
请求头与 ProductService
进行交互:
GetProductInformation Request
GET {{baseRestUrl}}
/services
/productService
/getProductInformation
?productId=123
# Authorization: not set
这个请求会成功拿到服务的返回内容:
HTTP/1.1 200
{
"name": "Apple iPhone",
"productId": "123",
"price": 499.99
}
如需为某些 实体 端点提供匿名访问,请确保 anonymous
用户有访问这些实体的权限。可以创建一个 资源角色 然后分配给 anonymous
用户,代码中使用 DatabaseUserRepository.initAnonymousUser()
方法。示例:
@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();
}
@Primary
@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);
}
}
匿名访问功能 不需要 anonymous 用户有 rest-minimal 角色。
|
本页是否有帮助?
感谢您的反馈