OAuth是开放授权协议而非认证协议,通过授权码等模式使第三方应用在用户授权下安全获取有限信息。PHP常用OAuth 2.0模式包括:1.授权码模式(最安全,适用于Web应用);2.隐式模式(已淘汰);3.客户端凭证模式(服务间调用);4.密码模式(不推荐,仅限内部使用)。
OAuth是一种开放授权协议,不是认证协议。它让第三方应用在用户授权的前提下,安全地获取用户在某平台(如微信、QQ、GitHub)上的有限信息,而无需拿到用户的账号密码。
目前主流平台基本都采用 OAuth 2.0,PHP接入时主要涉及以下几种模式:
以微信网页授权为例,实际开发中需注意这些环节:
之完全一致(含http/https和结尾斜杠)。snsapi_base只能获取openid(静默授权),snsapi_userinfo才能拉取昵称头像等信息(需用户点击同意)。appid和openid是否匹配,防止伪造code;同时建议缓存access_token(有效期2小时)和refresh_token(用于续期)。/sns/userinfo接口时,需用上一步返回的access_token + openid,且该token必须是用snsapi_userinfo授权获得的,否则会报错40003。不用从零造轮子,推荐用成熟SDK或轻量封装:
getAccessToken()和getUserInfo()逻辑。guzzlehttp/guzzle发HTTP请求,比原生cURL更简洁;错误处理要覆盖网络超时、JSON解析失败、API返回errcode等常见情况。基本上就这些。核心是理解授权流程、管好token生命周期、做好异常兜底。不复杂但容易忽略细节。