jmix2.0 rest 认证

认证码授权,通过用户名密码来获取token,一定要跳转到下面的页面么
image
,这个页面我也一直跳转不到,那个测试网站生成的地址,是这样的

(http://localhost:8080/heating/oauth2/authorize?client_id=myapp&redirect_uri=https%3A%2F%2Foauthdebugger.com%2Fdebug&scope=&response_type=code&response_mode=form_post&code_challenge_method=S256&code_challenge=iM83TyounfWliLa5q5vEg8TbbdwdM5Ey5BRRI-MPjlA&state=we679m5c3nq&nonce=p6t3ry75hr)

按照文档做的,总是重定向到平台的登陆页面

image

还是那个问题,必须跳转到那个很丑的登陆页面,填写用户名密码么~还是需要自己做些其他逻辑~

你好,
能描述一下具体问题吗?要实现什么功能?哪一步有问题?

我现在照着文档做的, 认证码授权方式获取token,流程基本是通的,但是有个疑问就是,流程中要跳转到一个登陆页面。
假如我做个手机app,获取token,也必须跳转到那个登陆页面么,而不是通常的进入手机app,有个自己的登陆页面,输入账号密码,就能直接获取token这样子,是需要自己做哪些逻辑么

这块建议系统的了解一下 OAuth2.0 的几种授权方式(授权码、 隐藏式、密码式、凭据式)及相关概念(OAuth客户端、认证服务、资源服务)。

OAuth2.0 是一种通用的、大范围内的系统安全认证机制, 一些认证机制是为异构系统设计的。 比如QQ提供了统一认证服务,第三方应用可以接入QQ统一认证, 但是肯定不允许第三方应用获得用户的用户名密码,那么这种情况下使用授权码就是比较合适的方案。因为授权码方式下用户登录时需要跳转到QQ统一认证提供的认证页面, 认证通过后再跳转回第三方应用。这种认证方式稍微复杂一些,但是可以确保用户信息不泄露给第三方。
如果整个系统都是自己的应用,应用都是可信的,那么登录认证完全可以使用 密码式

好的,感谢

了解了一下,密码式似乎在OAuth2.1中被废除掉了,jmix2.0 最新 用的就是2.1

image
2.1 协议中 似乎就说了这三种模式,
image

抱歉,我没注意到 Spring 去掉了 password 授权类型,我们系统使用的 Spring 5.3 还可以用。

这样的话建议适应规范来做,Spring OAuth 对规范的支持还是比较好。

这样的话是不是可以自定义一下那个登陆页面,适应一下自己应用的样式需求

当然可以定义,这块就属于 Spring MVC、Spring Boot 技术范围了,有大量资料可以参考。

  • 如果只是定义页面样式,在 src/main/resources/templates 目录下放一个与 jmix-authserver 中的模板同名的模板文件,jmix-authserver 中这个登录页面模板是 as-login.html ,可以看一下源码就能看到。

https://github.com/jmix-framework/jmix/blob/5885e8f199e0abecf2d9f587efb77a103087b0cc/jmix-authserver/authserver/src/main/resources/templates/as-login.html

  • 另外我看了一下源码, jmix-authserver持久化 token 信息用的是 InMemoryOAuth2AuthorizationService,这块你可能需要提供另外一个可持久化的实现,比如 JdbcOAuth2AuthorizationService

https://github.com/jmix-framework/jmix/blob/5885e8f199e0abecf2d9f587efb77a103087b0cc/jmix-authserver/authserver-starter/src/main/java/io/jmix/autoconfigure/authserver/AuthServerAutoConfiguration.java#L125C27-L125C27

非常感谢

看到这里有个issue,刚发布的2.0.1 ,可以指定 表单,Issues · jmix-framework/jmix · GitHub

1 个赞