如何实现B2C tenant中社交登录用户自助删除账号流程
Azure AD B2C 社交登录用户自助删号实现方案
普通社交登录用户默认无法直接调用Graph API删除自身在B2C租户中的目录条目,你之前碰到的接口要求管理员权限的问题是默认配置下的正常表现,不需要给普通用户分配管理员角色,通过自定义策略加服务端代理的方案就能实现全自助的用户删号流程,全程不需要管理员介入。
核心实现逻辑
绝对不能把Graph API的高权限直接下放给前端或者普通用户持有的访问令牌,正确的流程是:用户在前端触发删号请求后,先通过B2C自定义策略完成本人身份二次校验,校验通过后由你可控的后端服务用应用级权限调用Graph API执行账号删除,所有高权限操作都在你的服务端闭环完成,避免权限泄露风险。
具体落地步骤
- 前置配置服务端调用身份
在B2C租户中注册一个仅供后端服务使用的应用,仅给这个应用分配User.ReadWrite.All的应用程序权限(注意不是委托权限),生成对应的客户端密钥存储在服务端配置中,严禁把该密钥、接口调用逻辑暴露到前端侧。 - 上传配置删号自定义策略
你找到的官方自定义策略示例核心实现两个能力:一是对发起删号请求的用户做二次身份核验,不管是本地账号还是Google、微信等社交登录账号,都要求用户重新完成登录流程确认是本人操作;二是身份核验通过后,将当前用户的objectId声明通过预配置的REST API声明提供程序,传递给你自己实现的后端删号接口。 - 开发后端删号校验接口
实现一个仅接受B2C策略请求的后端接口:- 首先校验请求合法性,验证B2C策略的请求签名、提前配置的接口专用访问密钥,拦截恶意构造的删号请求
- 从合法请求中提取已核验身份的用户objectId,用之前配置的服务端应用凭证走客户端凭证流获取Graph API访问令牌
- 调用Graph API的删除用户接口清除B2C租户中对应的用户目录条目,同步清理自身业务数据库中关联的该用户业务数据
- 接口向B2C策略返回成功响应,策略会自动完成用户当前会话注销,跳转到你预先配置的删号完成提示页
- 配置前端删号入口
在Web应用的用户中心页面添加「永久删除账号」按钮,用户点击后直接跳转到B2C删号自定义策略的授权端点即可,前端不需要承载任何身份校验、删号执行的逻辑。
注意:不要尝试给普通用户分配自删除相关的Graph委托权限,B2C租户中的社交身份用户默认属于外部访客类主体,委托权限下的自删除接口对这类用户存在兼容性问题,且直接给用户开放目录写入权限会带来越权操作风险,前面提到的自定义策略加服务端代理的方案是生产环境下的标准实现方式。
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

