授权服务器对接APP的基本原理
在开发企业级移动应用时,经常需要实现用户登录、权限控制和数据安全访问。这时候,授权服务器(Authorization Server)就派上了用场。它负责发放访问令牌(Access Token),让APP能安全地调用后端API。整个流程基于OAuth 2.0或OpenID Connect等标准协议,确保身份验证过程既可靠又标准化。
比如公司内部的考勤APP,员工打开应用后不会直接连接数据库,而是先向授权服务器请求令牌。拿到令牌后,再凭此去访问打卡接口。这样即使APP被反编译,也不会泄露账号密码。
常见对接场景举例
假设你正在为一家连锁超市开发门店管理APP。每个店长需要用专属账号登录系统查看销售数据。这时候,APP不能把用户名密码明文传给后台,而是通过授权码模式(Authorization Code Flow)完成认证。
用户点击“登录”后,APP跳转到公司统一的登录页,输入账号密码。验证成功后,授权服务器返回一个临时的code。APP再用这个code向服务器换取access_token和refresh_token,后续所有请求都携带token进行。
对接流程关键步骤
第一步是注册客户端。在授权服务器管理后台为APP创建一个客户端ID(Client ID)和密钥(Client Secret)。如果是原生APP,通常会把Client ID写在配置文件里,而Client Secret则保留在服务器端,避免泄露。
第二步是引导用户跳转认证地址。构造一个标准的OAuth URL,包含client_id、redirect_uri、response_type=code、scope等参数。例如:
https://auth.example.com/oauth/authorize?client_id=abc123&redirect_uri=app%3A%2F%2Fcallback&response_type=code&scope=profile+offline_access用户授权后,会重定向回APP指定的回调地址,并附带code参数。这一步在Android可以用Custom Scheme或App Links捕获,在iOS则使用Universal Links或URL Scheme。
第三步是用code换token。APP从回调中提取code,立即向token端点发起POST请求:
POST /oauth/token HTTP/1.1\nHost: auth.example.com\nContent-Type: application/x-www-form-urlencoded\n\nclient_id=abc123&client_secret=xyz987&code=auth_code_from_redirect&grant_type=authorization_code&redirect_uri=app%3A%3A%2F%2Fcallback服务器校验无误后返回JSON格式的令牌信息,包括access_token、expires_in、refresh_token等字段。APP需将这些信息安全存储,比如Android用Keystore,iOS用Keychain。
刷新令牌与登出处理
access_token通常有效期较短,比如一小时。过期后不需要让用户重新登录,APP可以直接用refresh_token申请新令牌。请求方式类似:
POST /oauth/token HTTP/1.1\nHost: auth.example.com\nContent-Type: application/x-www-form-urlencoded\n\nclient_id=abc123&grant_type=refresh_token&refresh_token=prev_refresh_token一旦收到新的access_token,旧的refresh_token应作废,提升安全性。当用户主动退出登录时,除了清除本地token,最好也向授权服务器发送登出请求,使其在服务端注销会话。
实际开发中的注意事项
调试阶段建议开启日志输出,记录每次网络请求的入参和响应,方便排查问题。但上线前必须关闭敏感信息打印,防止token被截获。
有些企业使用自建CA签发证书,APP可能因不信任该证书导致HTTPS请求失败。此时需要在代码中配置信任特定根证书,或联系IT部门更换公共受信证书。
对于WebView内嵌登录页面的情况,注意不要让token出现在URL中太久,防止被第三方应用劫持。推荐使用PKCE(Proof Key for Code Exchange)机制增强移动端安全性,避免授权码被中间人截取滥用。