OpenId IdentityServer下使用ClientID与ClientSecret实现用户自动登录的方法
持有ClientID和ClientSecret的场景下可以实现用户自动登录,你已经初始化了IdentityModel库的TokenClient实例,后续操作根据实际场景分为两类:
场景1:首次自动登录(已知用户账号密码)
需要使用密码授权模式,该模式需要你的IdentityServer服务端已给当前ClientID开放password授权类型,操作步骤如下:
- 调用
RequestResourceOwnerPasswordAsync方法传入用户凭证和要申请的权限scope,获取用户令牌
// 替换参数为实际的用户名、密码、你申请的业务权限scope var tokenResponse = await client.RequestResourceOwnerPasswordAsync("user_account", "user_password", "your_api_scope openid profile"); if (tokenResponse.IsError) { // 处理异常:比如账号密码错误、权限不足等 Console.WriteLine(tokenResponse.Error); return; } // 存储返回的令牌信息 string accessToken = tokenResponse.AccessToken; string refreshToken = tokenResponse.RefreshToken; int expiresIn = tokenResponse.ExpiresIn;
- 后续发起业务请求时,在请求头携带Bearer令牌即可等同于用户登录状态
httpClient.SetBearerToken(accessToken); // 后续通过该httpClient发起的请求都会自动携带登录凭证
场景2:用户曾登录过、本地存储了有效刷新令牌
不需要用户账号密码,直接用刷新令牌续期即可实现静默自动登录:
// 传入本地存储的历史刷新令牌 var tokenResponse = await client.RequestRefreshTokenAsync("local_stored_refresh_token"); // 拿到新的access_token后替换旧凭证即可,处理逻辑和场景1完全一致
注意:生产环境不推荐长期存储用户明文密码实现自动登录,优先使用刷新令牌方案,仅在用户首次登录时输入一次密码,后续全程通过刷新令牌续期凭证。
内容的提问来源于stack exchange,提问作者Jefferson
相关产品推荐
相关产品推荐

