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

Authentication Web Api客户端身份验证(非用户身份验证)最佳实践,authentication,asp.net-web-api,owin,bearer-token,Authentication,Asp.net Web Api,Owin,Bearer Token,我正在为我们的移动客户端向我的项目添加一些web api(使用mvc web api)。我正在使用OWIN和承载令牌(密码授予类型)进行用户身份验证,就我而言,这是用户身份验证和资源授权的最佳实践,但我的问题是如何验证我的客户端(使用标准化方法)以便只有实际和真实的客户才能访问服务(甚至匿名服务) 例如,我们有两种类型的客户端android和IOS应用程序,只有这两种必须访问web api 这样做的最佳解决方案(实践)是什么?owin有什么解决方案吗?? 到目前为止,我一直在尝试为每个客户端和版

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

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

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

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

下面是一个android客户端的密钥示例

"StoreFrontType" : "AndroidApp"
"StoreFrontVersion" : "1.0.0.0"
"Client_Token" : "1vnM/XHDmIfv1yhftbnCnc8R92vRhSBBsciKzyHEVYmAI2bTpHqWsgmVBGel6Rd"
我与我们的移动开发者进行了一次对话,他们说这种方法总比什么都没有好,但是不够安全,因为移动应用(特别是android)源代码和证书可以反编译并轻松读取,因此使用我的方法不够安全,因为通过这种方法,如果有人获得公钥(通过反编译源代码或读取证书),他们可以发送请求,并且他们将被称为有效客户端


任何帮助都将不胜感激

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

如果移动客户端的合法用户希望获得标识设备为受信任客户端的令牌/机密,他/她将能够。然后,他们可以将标识符和令牌提供给任何人,然后他们将能够标识为合法客户端

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