首页 新闻 搜索 专区 学院

关于Web API Authentication 认证,目前使用的密码模式,集群以后,一台服务器得不到Token

1
悬赏园豆:100 [待解决问题]

场景如下:

1.使用web api Authentication 认证,模式使用密码模式,产生Token进行请求验证;

2.目前集群两台服务器A | B;

3.用户在第一次请求的时候,使用的A 服务器资源,产生了Token;第N+1 次请求的资源到了B 服务器,问题就出现了,因A 服务器资源未同步Token 至 B 服务器,导致出现401 错误?

问题:

1.服务器A 与 服务器B 如何实现Token 的同步?

2.Web API Authentication 所产生的Token,目前好像无法拿到?

急,等大神解答一下,万分感谢!

Gaven.xue的主页 Gaven.xue | 初学一级 | 园豆:102
提问于:2017-06-30 17:40
< >
分享
所有回答(7)
2

应该要有一个统一的token验证服务器。或者你的api服务器验证机制要一致。

比如:token验证服务器独立出来,比如api都去你的数据库查询token验证

czd890 | 园豆:12604 (专家六级) | 2017-06-30 17:44

 现在的情况是这样的,.net 中的web api auth,在请求的时候是把token输出给了客户端,客户端请求的是/token 这个post 请求,但是在web api auth 中的继承:OAuthAuthorizationServerProvider 这个基类的GrantResourceOwnerCredentials中得不到当前token,只有返回客户端才行,如果是这种情况,单独部署认证服务,这个token 得不到,集群部署也存在该问题了,能否得到在服务端得到这个token呢?

支持(0) 反对(0) Gaven.xue | 园豆:102 (初学一级) | 2017-07-03 15:15
0

这个token不放缓存或数据库?

吴瑞祥 | 园豆:29369 (高人七级) | 2017-06-30 17:54
0

分布式部署,请一定要使用分布式缓存作为Token存储。比较常用的是Redis。

幻天芒 | 园豆:36910 (高人七级) | 2017-06-30 21:34

 现在的情况是这样的,.net 中的web api auth,在请求的时候是把token输出给了客户端,客户端请求的是/token 这个post 请求,但是在web api auth 中的继承:OAuthAuthorizationServerProvider 这个基类的GrantResourceOwnerCredentials中得不到当前token,只有返回客户端才行,如果是这种情况,单独部署认证服务,这个token 得不到,集群部署也存在该问题了,能否得到在服务端得到这个token呢?

支持(0) 反对(0) Gaven.xue | 园豆:102 (初学一级) | 2017-07-03 15:15

@Gaven.xue: 不要用这个认证。或者你严格按照oauth走。

支持(0) 反对(0) 幻天芒 | 园豆:36910 (高人七级) | 2017-07-03 15:19
0

第一次 登入的时候。服务器为每个用户产生唯一的key。 保存起来 一般都是用redis 。每一次返回的时候把这个key简称(Token)

输出到客户端 。客户端每一次请求的时候带上Token 。

s_p | 园豆:219 (菜鸟二级) | 2017-07-01 08:05
0

几月OAuth2的用户名密码模式生产的Token吗?如果是,看看是否可以配置Token为jwt格式的,这样服务器就不需要存储token了。

Timetombs | 园豆:3754 (老鸟四级) | 2017-07-03 12:11

 配置为jwt 格式,集群部署时会自动实时同步token?

支持(0) 反对(0) Gaven.xue | 园豆:102 (初学一级) | 2017-07-03 15:17

@Gaven.xue: jwt不在服务器存,是解密jwt获取用户信息。

支持(0) 反对(0) 幻天芒 | 园豆:36910 (高人七级) | 2017-07-03 15:19
0

你应该需要在web.config中配置相同的machineKey能正常解密出来。

Michael.li | 园豆:291 (菜鸟二级) | 2017-07-06 09:29

 两台OAuth 认证服务器,修改对应的machineKey为一致,Token 就会自动同步识别吗?

支持(0) 反对(0) Gaven.xue | 园豆:102 (初学一级) | 2017-07-06 09:33

@Gaven.xue: 是的。每台电脑的machineKey不同一样,所以不同机器生成的token 无法通用。

支持(0) 反对(0) Michael.li | 园豆:291 (菜鸟二级) | 2017-07-06 10:20
0

1. 如果token是随机生成的,建议将生成的token放到缓存中,比如redis,每次判断都通过从缓存取,对效率的影响也不大。不过这种方案要求缓存服务器的稳定性很高,一般做成集群,至少有个主备。

2. 如果你的token是使用加密的方法生成的,你可以在不同服务器上使用相同的密钥解密就行了。我们公司有个系统的用户登录验证就是这么做的,这种方法的好处就是不依赖其他的服务。

苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-10 16:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册