如何为含API层的现有Web应用添加Azure身份认证功能
分层改造范围结论
两层都需要做增量调整,全程不需要修改任何现有用户名密码登录的存量代码,所有改动都是新增逻辑,不侵入原有链路:
- Web(UI)层改动:
不需要改动原有账号密码登录页、表单提交、令牌存储、接口调用的任何逻辑。只需要新增两个内容:一是在登录页加一个「使用Azure账户登录」的按钮入口,二是新增Azure AD OpenID Connect的认证配置,配置逻辑为:用户点击Azure登录按钮后跳转到Azure AD登录页,登录成功拿到Azure颁发的身份令牌后,直接调用API层新增的Azure专属换票接口,拿到你系统原有格式的访问令牌后,后续的登录状态存储、接口鉴权传参完全复用现有逻辑即可。 - API层改动:
不需要改动原有账号密码校验、自有令牌颁发、业务接口鉴权的任何逻辑。只需要新增两个内容:一是引入Azure AD令牌的校验参数配置,用来验证前端传过来的Azure令牌的合法性(包括签发方、有效期、对应租户、受众是否匹配);二是新增一个Azure AD专属的登录换票接口,逻辑为:校验传入的Azure令牌合法后,提取令牌中携带的用户邮箱/Azure AD对象ID,匹配本地用户库的对应账号(无匹配时可按需配置自动注册逻辑),之后直接复用你现有的令牌颁发方法,返回和原有账号密码登录完全一致格式的系统访问令牌即可,后续所有业务接口的鉴权逻辑完全不需要调整。
「Expose an API」能力适配说明
仅实现Azure AD门户登录的场景下,你完全不需要使用应用注册里的Expose an API能力。
这个能力的核心作用是给你的API配置Azure AD原生的权限管控体系,适用场景是:你需要让其他Azure AD集成的应用(比如第三方服务、Power Platform、Logic Apps等)直接持Azure AD颁发的令牌调用你的API时,才需要在这里配置API作用域、授权客户端范围。你的场景中API全程只认自己颁发的自有令牌,Azure AD只用来做用户身份的前置核验,不需要让外部服务直接通过Azure令牌调用你的业务接口,所以这个功能对你的场景没有价值,不需要配置。
最小改动提示:所有Azure AD相关的新增逻辑都可以加独立的配置开关控制启停,上线后如果出现异常直接关闭开关隐藏登录入口即可,完全不会影响原有账号密码登录链路的正常运行。
内容的提问来源于stack exchange,提问作者Psychonaut007
相关产品推荐
相关产品推荐

