基于Identity Server 4与EF Core无跳转获取令牌、注册用户可行性咨询
结论
可以实现,两种操作分别对应不同的实现方案,但是需要注意遵守OAuth2/OIDC的安全规范,避免引入不必要的安全漏洞。
令牌获取实现方案
- 如果你需要的是关联用户身份的令牌(id_token、access_token),可以使用OAuth2的
密码授权模式(Resource Owner Password Credentials Grant),该模式不需要跳转Identity Server 4的登录页,你可以直接在SPA前端收集用户的账号密码,调用Identity Server 4的/connect/token端点,提交账号密码、客户端标识等参数即可直接拿到返回的令牌。
注意:密码授权模式在OAuth2.1规范中已经被标记为废弃,仅推荐在两个SPA都是你方自有项目、完全可控的场景下使用,不要应用在面向公开用户的非自有业务场景。
- 如果你需要的是不关联用户身份的客户端令牌,直接使用
客户端凭证模式调用/connect/token端点即可,该模式是官方推荐的安全模式。
新用户注册实现方案
Identity Server 4本身没有内置用户注册接口,你需要自行在Identity Server 4服务侧扩展注册能力,操作如下:
- 因为你已经搭配EF Core使用,可以直接在Identity Server 4服务项目中新增自定义WebApi接口,接口内部通过EF Core操作用户存储表(默认是
AspNetUsers表,如果你做了自定义用户表就操作对应表)完成用户创建逻辑,同时可以根据业务需要配套实现邮箱/手机号验证、密码复杂度校验等能力。 - 给自定义的注册接口配置跨域规则,允许两个SPA的域名访问,同时做好防刷、参数校验逻辑避免恶意注册。
额外安全提示
- 不要把Identity Server 4的客户端密钥硬编码在SPA前端代码中,SPA属于公开客户端,本身无法安全存储敏感信息,如果你要用密码授权模式,尽量不要给对应客户端配置密钥校验规则,或者将调用Identity Server 4接口的逻辑封装到你自己的后端BFF层,前端只调用自有后端接口,由后端和Identity Server 4交互,避免敏感信息泄露。
- 条件允许的情况下更推荐使用BFF模式托管两个SPA的认证逻辑,既不需要前端跳转Identity Server 4页面,也符合最新的安全规范,不需要在前端暴露任何Identity Server 4的敏感配置。
内容的提问来源于stack exchange,提问作者Hussein A Sahei
相关产品推荐
相关产品推荐

