Web Api客户端身份验证(非用户身份验证)最佳实践

时间:2017-04-08 07:05:09

标签: authentication asp.net-web-api owin bearer-token

我正在为我的项目(使用mvc web api)为我们的移动客户端添加一些web api。我正在使用OWIN和Bearer Token(密码授权类型)进行用户身份验证,因为我担心它是最好的用户身份验证和资源授权的实践,但我的问题是我如何验证我的客户端(使用标准化方法),以便只有实际和真实的客户端才能访问服务(甚至是匿名服务) < / p>

例如我们有两种类型的客户端android和IOS应用程序,只有这两种必须能够访问web api

这样做的最佳解决方案(练习)是什么,并且owin有什么解决方案吗?

我到目前为止尝试的是为每个客户端和版本生成一个公钥,并将密钥提供给我们的移动开发人员,他们将密钥插入证书中并在每个请求中发送密钥

这是一个Android客户端密钥的示例

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

我与我们的移动开发者进行了对话,他们说这种方法比不够安全更好,因为移动应用(特别是android)源代码和证书可以反编译和轻松阅读因此使用我的方法不够安全,因为通过这种方法,如果有人获得公钥(通过反编译源或阅读证书),他们可以发送请求,他们将是被称为有效客户

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

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

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

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