【问题标题】:Mobile app - Authentication and authorization with ASP.NET移动应用程序 - 使用 ASP.NET 进行身份验证和授权
【发布时间】:2014-09-05 16:54:33
【问题描述】:

我正在考虑开发一个移动应用程序,与旧的 Web 应用程序集成。

我的第一个想法是使用 PhoneGap(在 VS 2013 上有新的支持)和 REST WebApi 服务。

这个想法是让我的网络应用程序具有注册、登录等功能(使用 ASP.NET 身份)。 以及具有注册、登录等功能的移动应用程序(使用包装器或带有令牌身份验证的 ASP.NET Identity 之类的东西) 基本上在我的移动应用程序上反映网络应用程序的功能(仅具有身份验证和授权差异)。

到目前为止一切顺利。

但是在网上搜索我没有找到任何与我的 asp.net 身份模块集成的好例子。 目前我知道移动应用程序不支持cookie,所以想法是使用“令牌认证”。但我找不到一个很好的例子来实现这一点并补充我的网络应用用户数据库。

有像我要求的教程或示例项目吗?开发此功能的最佳方法是什么?

提前致谢。

【问题讨论】:

  • 通过 REST 服务发送凭据,检索令牌并将其存储在本地,例如在 localStorage 中,然后在每个请求中添加存储在 localhost 中的令牌。
  • 在最近的一个项目中,我能够使用 MVC 5 中内置的 vanilla“承载”令牌身份验证以及 Cordova 应用程序。登录,您会在回复中获得一个令牌。将令牌存储在 localStorage 中,并将其包含在应用程序的 REST 请求的标头中。抱歉,暂时没时间写好答案。
  • @MattJ。所以..你只使用谷歌/微软/Facebook登录的身份验证?没有来自 ASP.NET Identity 的自定义注册?
  • 也使用了 .Net 和 Facebook 的自定义注册。但最终创建了我自己的令牌,我将其作为参数传递给每个休息调用,而不是标题中的“承载 xxxx”。有点非传统但有效并提供了更多控制权。抱歉,我只是看了一下代码,看看这里有没有什么值得分享的,但是它与其他东西的结合太紧密了。

标签: asp.net cordova mobile


【解决方案1】:

你也可以走原生路线。制作自定义的科尔多瓦插件,您可以通过这些插件来编组您的 api 调用。

http://cordova.apache.org/docs/en/3.5.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide

然后,您的本机代码将在发送请求之前对标头集合进行任何必要的调整。

机器人:

DefaultHttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("[your-api-url]");
httpPost.setHeader("[header-name]", "[header-value]");
HttpReponse httpReponse = client.execute(httpPost);

InputStream reponseInputStream = httpReponse.getEntity().getContent();

iOS:

NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:url] autorelease];

[request addValue:@"[header-name]" forHTTPHeaderField:@"[header-name]"];

【讨论】:

    【解决方案2】:

    我遇到过这种情况,但我选择使用 Xamarin for iOS 构建客户端。我假设您想要一些动手示例,所以这里是:

    1.移动应用上帐户的持久存储

    https://components.xamarin.com/view/xamarin.auth

    2。客户端包装器(使其成为可移植类库)

    https://github.com/nbusy/NBusy.SDK/tree/master/src/NBusy.Client

    基本上,当您登录时,AccountStore 会将令牌(无论您在服务器端为 API 使用何种类型,即基本身份验证、承载令牌等)保存在本地加密存储中,并由客户端使用每次调用 API 时的 PCL。

    我对此有完整的工作解决方案,但我无法将其公开。我希望这些提示能帮助您找到正确的解决方案。

    【讨论】:

    • @Cornelie Serediuc 很好的信息,但我不想使用 Xamarin。我知道,但此刻我尝试简化并用phoneGap来做,我的想法很简单,可以用它来完成。无论如何,有机会与我分享您的代码吗?当然我不会公开,只是为了举个例子。谢谢。
    • @HolloW - 你对代码的哪一部分感兴趣? API 与 ASP.NET 标识一起使用的令牌生成?还是客户端 Wrapper?
    • @Cornelie Serediuc 这两个部分,如果你能给我一个这两个的简单例子,再加上另一个表单的注册、登录和简单的方法调用,那就太棒了。
    • @HalloW - 要发布的代码很多。这里有一个很棒的教程,可以帮助您入门:link。让我知道它是否有帮助。如果没有,我会提供更多信息。
    • 我已经阅读了该教程。无论如何,您是否知道另一个使用令牌的带有phonegap 的客户端的简单实现?我认为有了这些,我有一个很好的起点。
    【解决方案3】:

    我已经多次使用 Asp.net 作为服务器端和 Phonegap 作为客户端。 首先,你是对的,你不能在Phonegap APP中使用cookie。 Phonegap 提供了其他东西来存储本地数据。 How to store local data in Phonegap

    根据我的经验,通常有两种方法可以实现身份验证。

    1 正如 Marcin 所说:

    将输入的登录数据发布到服务器->服务器返回一个Token密钥(一段时间可用)->将令牌密钥存储在某处(例如localstorage,websql)->下次发布Token进行认证

    2 Oauth 模式:

    当用户点击登录按钮时,会弹出一个窗口。在窗口中,它是您现有站点的一个链接。您可以在此窗口中输入您的登录信息(不是在 Phonegap 应用程序中,而是在您网站的页面中)。如果有效,窗口将获得一个带有令牌密钥的 URL(例如“abc.com?token=a2E4w”)。将令牌作为每个 API 的参数传递,并检查它在每个请求中是否有效。 要存储 Token 密钥,您可以使用第 1 点中提到的内容。

    请注意,我认为第二点会更安全,因为“登录信息”和“输入操作”都发生在 Phonegap 应用程序之外。

    【讨论】:

    • 很好的信息。你有这两种实现的样本吗?或至少其中之一?
    • @HolloW 抱歉,我暂时没有这两个的演示。
    • @HolloW 关于第一个,我认为实现对你来说应该不难。关于第二个,我想你可以查看一些有关 Oauth 的相关导师,例如 Facebook、Twitter。
    • 第一种情况下如何在服务器上生成token?你知道一个好的做法还是一个带有过期时间的简单哈希?
    • @HolloW 我在这里找到了一个很好的答案。这可能会解决您的疑问。 stackoverflow.com/questions/14643735/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2019-04-30
    • 1970-01-01
    • 2012-06-29
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多