MVC 5,Identity 2.0,Android Rest/Json Api

3

我有一个使用Identity 2.0进行身份验证/授权的ASP.NET MVC 5应用程序。现在,我想通过Web Api 2.0向我的Android应用程序提供对Web应用程序中数据的访问权限。

我的问题是:如何控制Android应用程序的授权/身份验证访问?

在Android端,我使用"org.springframework.web.client.RestTemplate",并将此HTTP头添加到我的请求中:

    HttpAuthentication authHeader = new HttpBasicAuthentication("username", "password");
    HttpHeaders requestHeaders = new HttpHeaders();
    requestHeaders.setAuthorization(authHeader);
    HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);

我应该创建一个过滤器(Filter)还是一个 HttpModule,在那里分析 HTTP Header 并查询数据库以检查是否存在该用户?
对于 HTML / JavaScript 前端,我清楚它如何工作。在每次成功的登录后,都会使用一个 cookie,用于所有后续调用,但是对于我的 Android 应用程序,最佳策略是什么?
更新: 找到了这两个链接,但我不确定是否应该采取这种方式: http://springinpractice.com/2012/04/08/sending-cookies-with-resttemplate http://blog.mikepearce.net/2010/08/24/cookies-and-the-restful-api/
1个回答

3
你可以像你建议的那样,为你的WebApi控制器创建一个过滤器来授权和认证来自客户端应用程序的访问。这里有一篇博客文章可能会帮助你实现这样的东西。
然而,我建议使用由Oauth标准定义的访问令牌。这种身份验证和授权方法非常适合移动应用程序。您可以创建长寿命访问令牌,使您的移动客户端应用程序类似于长寿命cookie和浏览器客户端登录。或者您可以使用短生命周期访问令牌和长寿命刷新令牌。此外,您也可以在浏览器客户端中使用Oauth,从而实现单个身份验证实现。这里有一个关于令牌和Oauth的很好的SO答案。
请查看IdentityServer,以下文字摘自他们的Github存储库:

IdentityServer是一个基于.NET/Katana框架和可托管组件,允许使用诸如OpenID Connect和OAuth2之类的协议为现代Web应用程序和API实现单点登录和访问控制。它支持各种客户端,如移动设备、Web、SPAs和桌面应用程序,并且可扩展,以允许集成到新的和现有的架构中。


非常感谢,但我肯定需要一些时间来阅读您的建议。它听起来肯定比我的方法好!当然,我不会忘记将其标记为答案!! - stefan
@stefan 没问题,伙计,很高兴能帮到你 :) - Anish Patel
你能看一下我的下一篇帖子吗?http://stackoverflow.com/questions/31891898/webapi-2-oauth2-android-client - stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接