没有登录屏幕的移动应用认证

时间:2014-01-15 01:09:49

标签: authentication mobile

我正在设计一款移动应用,其中用户下载的客户端应用只需打开浏览器并打开我设计的网络应用。除了通过下载的应用程序外,永远不应该访问Web应用程序。在我把网站放到那里之前,我想实现身份验证,以便人们在发布之前无法访问它。

Web应用程序是Azure / C#/ MVC5 / Javascript / Sql Server。启动程序因平台而异(Android / iPhone / Windows8Phone)。

如果可能,我想做的是在不需要密码的情况下实现身份验证,以减轻用户的负担。从安全角度来看,我并不十分担心。验证的主要目的只是为了验证用户确实购买了应用程序并且他们不仅仅是浏览网站。

我认为这部分很容易,但我花了很多时间寻找解决方案,而且比起初时我更加困惑。从我所读到的,听起来我可能需要一个'秘密'或'随机'。我不知道如何实现这样的事情。基本上,我在这里寻找两件事 - 确认我正在从知道这个领域的人那里走向正确的道路(或者如果没有,那么就是一个课程修正),也许是一个包含实际实施细节的网站的链接。适当的解决方案。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您需要在客户端上拥有Web后端可以验证的秘密。

传递秘密进行验证

您可以使用REST将密码传递给Web后端:http://web.app.com/something?secret=XXXXXX

如果秘密检出,您可以将客户端重定向到相应的页面。

创建秘密

它可以是您想要的任何字符串,非常类似于您创建的密码。

更安全的秘密

通过执行以下操作,您可以生成一个秘密,以传递到每次不同的Web后端: secret = <random string> + SHA-1(<random string> + <fixed string>)

Javascript Library for SHA-1

注意:<fixed string>取决于您定义,这是“真正的”秘密,只有有权访问您的代码的人才会知道。 (当然,他们可以反汇编您的程序和/或观察其运行的内存空间以查找,但这超出了大多数情况)

测试秘密

在您的网络后端,将给定的秘密拆分为<random string>SHA-1部分。然后执行SHA-1(<random string> + <fixed string>)(客户端和后端的固定字符串相同)。如果SHA-1结果相同,则验证!

防止分享

用户可能仍然与他人分享这个秘密,为了防止这种情况,我们可以在<random string>给予<random string> + <time stamp>时引入时间戳。有了这个,我们可以将秘密的有效性限制在特定时间。在这种情况下,30秒到几分钟可能会在客户端上容纳因特网滞后和不准确的时钟。