首页 文章

使用asp.net身份在MVC和Web Api应用程序中进行一次身份验证

提问于
浏览
0

我有这个解决方案:

enter image description here

我需要在ASP.NET MVC站点和Web Api 2.0上进行一次身份验证(我的意思是我不必检查MVC站点上的用户名和密码是否正确,然后再次在Web Api上检查它们) .

老实说,我认为AngularJS和ASP.NET MVC不是一对好夫妻 . 但是,就是这样! ASP.NET MVC站点和Web Api可以位于不同的服务器上 .

在这一刻我可以在MVC应用程序上进行身份验证,我无法在web api上进行身份验证 . 我正在使用ASP.NET标识的默认代码 . 所以,我的 startup 课程我有:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Account/Login"),
    Provider = new CookieAuthenticationProvider
    {
        // Enables the application to validate the security stamp when the user logs in.
        // This is a security feature which is used when you change a password or add an external login to your account.  
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            validateInterval: TimeSpan.FromMinutes(30),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    }
});            

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

那么,一旦我在asp.net mvc上进行了身份验证,我怎样才能在web api上“自动”进行身份验证?

谢谢

UPDATE

我已经更新了图片 . 在这一刻,我从MVC应用程序做了一些请求 . 但这些请求不需要身份验证 . 其他一些请求来自angularjs,在这里我需要身份验证 . 在这一刻,我在MVC应用程序中验证用户 .

1 回答

  • 0

    如果我有这个权利,那么对你的问题有一个非常简单的解决方案 .

    用户在MVC应用程序中进行身份验证,这意味着对MVC控制器和Action方法的任何调用都受到保护,并且已成功通过身份验证 .

    在您的MVC应用程序中,您正在向您的WEB API发出请求 .

    Web API需要以某种方式保护其资源免受传入请求的影响,并且考虑到只有您的MVC应用程序应负责发出这些请求,您应该在WEB API中实现客户端秘密OAuth流 .

    可以将其视为将您的MVC应用程序注册为WEB API的使用者 .

    从MVC应用程序到web api的每次调用都会提供您的web api在提供资源之前验证的clientid和secret .

    从您的web api的角度来看,它并不关心用户是谁,它只关心试图访问其资源的应用程序 .

    如果应用程序无法提供秘密,那么他们就无法访问 .

    *** EDIT ***

    在您的web-api不面向公众并且仅需要经过身份验证的资源访问的情况下,您的客户端浏览器不应该直接与api通信 .

    您可以使用基于令牌的身份验证,其中一旦由令牌 endpoints 进行身份验证,客户端浏览器就会在向您发送的每个请求的标头中传递持有者令牌 .

    但是,这意味着您将访问令牌传递给浏览器,我不认为这对安全性有好处 .

    这就是为什么我会重新开始客户端浏览器只调用MVC应用程序作为它生活在服务器上,其服务不能被操纵,任何访问令牌都不能被截获 .

相关问题