2017-04-08 210 views
1

我正在为我的移动客户端添加一些web api项目(使用mvc web api)。我正在为用户使用OWIN和持票人令牌(密码准许类型)身份验证,就我而言,这是用户身份验证和资源授权的最佳做法,,但我的问题是我如何验证客户端(使用标准化方法),以便只有真实和真实的客户端才能访问服务甚至匿名服务)Web Api客户端身份验证(非用户身份验证)最佳实践

例如我们有两种类型的客户端Android和iOS应用中,只有这两个必须能访问网页API

这样做的最佳解决方案(实践)是什么,owin是否有任何解决方案?

什么我试过到目前为止产生了对每个客户端和版本公钥和给的钥匙,我们的移动开发者,他们插上密钥的证书内,在每个请求发送键

这里是一个Android客户端

"StoreFrontType" : "AndroidApp" 
"StoreFrontVersion" : "1.0.0.0" 
"Client_Token" : "1vnM/XHDmIfv1yhftbnCnc8R92vRhSBBsciKzyHEVYmAI2bTpHqWsgmVBGel6Rd" 

我进行了交谈与我们的移动开发者,他们说,这种方法比不过更好不够安全因为移动应用关键的一个例子(特别是android)源代码和证书可以反编译和易于阅读因此,使用我的方法不够安全,因为通过这种方法,如果某人获得公钥(通过反编译源代码或读取证书),他们可以发送请求并他们会被称为一个有效的客户端

任何帮助,将不胜感激

回答

1

这取决于你的威胁模型是什么。这个问题没有完美的解决方案。您不能相信移动设备保密,任何将设备标识为可信的客户端。

如果您的移动客户端的合法用户想要将标识该设备的令牌/秘密作为受信任的客户端,他/她将能够。然后,他们可以将标识符和令牌分发给任何人,然后他们可以将其标识为合法客户。

如果这不是您真正关心的问题,您可以使用OAuth2 client credentials flow。 OAuth2定义客户端凭据流,以便客户端以自己的名义获取访问令牌,但此流程仅适用于可信客户端(即驻留在服务器上的Web应用程序)。