【问题标题】:nativescript authenticating at backend web apinativescript 在后端 web api 进行身份验证
【发布时间】:2016-08-02 11:09:26
【问题描述】:

我是移动开发的新手。我的项目是使用 asp.net 构建的。对于身份验证,我正在使用构建它 UserManager 和 User.Identity。

我有一堆现有的网络 API,我希望从移动应用程序中使用它们。 我知道,我可以在身份验证后将秘密哈希传递给 web api,但这会涉及大量的代码重构。

我想知道是否有其他方法可以使用 nativescript 和 asp.net 处理身份验证和授权。

你知道这个主题的任何有用资源吗?

非常感谢您的帮助!

【问题讨论】:

  • 您使用的是 NativeScript-Angular 模块吗?如果是这样,那么遵循 angular2 Auth 主题将是一个很好的开始,并按照 George 下面的建议存储 auth 密钥。另请查看 GitHub 中的示例:github.com/NativeScript/nativescript-angular/blob/master/…,特别是如果您使用的是较新的路由器。
  • 我的主要问题是如何保持支持的会话继续进行。 Asp.net 在登录后传回一个 auth cookie。我正在尝试使用@George Edwards 评论并在 appSetting 处保存 cookie
  • @SimeonGrigorovich 好吧,我的方法是无状态的 - 您不必维护会话(可扩展性更高)。您只需将 JWT 设置为具有到期时间/日期,并且任何具有有效 jwt 的请求都会获得授权。无需了解每个登录的人的信息。
  • George 的方法适用于我使用 webapi v2+ 不记名令牌的旧离子应用程序,但我会在 angular 1 中使用拦截器。我想我之前添加了一个带有 cookie 的拦截器(它只需要是持久的曲奇饼)。我可能会使用 NativeSript + ASP.NET 和 WebAPI 的不记名令牌路由,并遵循与@George-Edwards 类似的路径。每个请求您只需要在标头中添加一个不记名令牌。 bitoftech.net/2014/06/01/… 应该可以提供帮助。
  • 我很想尝试使用 JWT 库(JSON Web Token)github.com/auth0/angular2-jwt 使用 .Net,但需要做更多工作:bitoftech.net/2014/10/27/… 源代码:github.com/tjoudeh/JWTAspNetWebApi

标签: asp.net asp.net-mvc authentication angular nativescript


【解决方案1】:

这在很大程度上取决于您的 API 结构,但我会推荐这样的东西:

首先您需要使用Nativescript Http 模块。获取 HTTP GET 调用返回的标头的实现可能如下所示:

http.request({ url: "https://httpbin.org/get", method: "GET" }).then(function (response) {
    //// Argument (response) is HttpResponse!
    //for (var header in response.headers) {
    //    console.log(header + ":" + response.headers[header]);
    //}
}, function (e) {
    //// Argument (e) is Error!
});

因此,您的后端可能会返回 JSON Web Token 作为标头。在这种情况下,在成功回调时,您可能希望将令牌存储在应用程序持久内存中。我会使用 Application Settings 模块,它看起来像:

var appSettings = require("application-settings");
appSettings.setString("storedToken", tokenValue);

然后,在您为新令牌进行 API 调用之前,您可以检查是否存在存储值:

var tokenValue = appSettings.getString("storedToken");
if (tokenValue === undefined { 
    //do API call
}

然后使用您的令牌,您会想要进行 API 调用,例如此 POST 并将令牌添加为标头:

http.request({
    url: "https://httpbin.org/post",
    method: "POST",
    headers: { "Content-Type": "application/json", "Auth": tokenValue },
    content: JSON.stringify({ MyVariableOne: "ValueOne", MyVariableTwo: "ValueTwo" })
}).then(function (response) {
    // result = response.content.toJSON();
    // console.log(result);
}, function (e) {
    // console.log("Error occurred " + e);
});

您的后端需要检查 Auth 标头并验证 JWT 以决定是接受还是拒绝呼叫。

另外,还有一些不错的插件可用于各种后端即服务,例如Azure 和 Firebase

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 2013-11-29
  • 1970-01-01
  • 2020-10-14
相关资源
最近更新 更多