【发布时间】:2017-08-16 12:17:48
【问题描述】:
我创建了一个允许外部身份验证/注册的 MVC 应用程序。它已经创建了所有必要的组件(Owin、EF、注册、登录、注销),我能够在应用程序中执行所有基本活动。
现在,我想将 Web 应用程序与我的移动应用程序也将使用的 Web API 集成。我在 Web API 调用中卡住了身份验证(使用从 Web 应用程序收到的不记名令牌)。
我看到了创建启用 OWIN 中间件的 WEB API 项目的示例。但我不知道如何集中外部身份验证过程并将令牌用于我的 Web 应用程序和移动应用程序 我不想使用 ANGULAR 或单页应用程序。 谁能建议我解决此问题的正确技术途径。 谢谢。
第 1 步:
我在 Visual Studio 2015 中创建了一个启用了个人登录的 MVC 项目。并配置了我在谷歌开发者控制台中配置所有内容的密钥。我的 Startup.cs 将有以下代码
public void ConfigureAuth(IAppBuilder app)
{
// Configure the db context, user manager and signin manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
// Enable the application to use a cookie to store information for the signed in user
// and to use a cookie to temporarily store information about a user logging in with a third party login provider
// Configure the sign in cookie
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))
}
});
第 2 步:
更改 webconfig 文件以指向我的本地数据库并运行应用程序,我能够使用我的 gmail 帐户通过 google 成功登录,并且用户详细信息已成功添加到数据库中的 ASPUSerTables
第 3 步:
现在我想创建一个 WEB API 项目,它将连接到数据库并将一些数据检索到 MVC Web 应用程序和移动应用程序(我在这里停留在身份验证部分)。我也需要对我的移动应用程序(Xamarin)使用第三方身份验证,并使用我的移动应用程序和 MVC 网站中的通用 API
第 4 步 所以我想,我应该创建 WEB API 项目,而不是 WEB 应用程序(第 1 步),该项目如下所示,以在 Startup.cs 中返回身份验证令牌并将该 cookie 存储在网站中以通过在随后的请求中。
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
// Configure the application for OAuth based flow
PublicClientId = "self";
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = true
};
我不想使用 ANGULAR,我需要我的 WebApplication(MVC) 和 WEB API 项目正确验证所有请求。请告诉我 正确的道路。 谢谢
【问题讨论】:
-
您在哪里卡住不记名令牌的身份验证??您遇到的错误是什么,这将有助于回答您的问题。我做过一些项目,移动端和网络端都使用相同的 Api,没有任何问题。
-
嗨贾万德。感谢您的即时回复。在我的 MVC 项目中,我能够在我的 AccountController 中从 google 获取用户声明,并能够在 ASPUsers 表中注册详细信息。我创建了单独的 web api 项目,没有 owin 组件(对吗),需要从 web 应用程序授权。我不确定如何在 webapp cookie 中获取访问令牌并授权 REST 调用。请指导我创建简单的 MVC 客户端应用程序(非 Angular)和 Web api 项目以支持 Web 和移动应用程序中的外部身份验证。
-
@DevOne 你能在问题中添加一些代码吗?
-
嗨。谢谢我已经更新了如果您需要更多信息请告诉我
-
@DevOne 我假设您想在您的 Web 应用程序中使用标准 MVC 控制器,对吗?你想从 MVC 控制器调用你的 Web API 吗?如果我错了,请纠正我。这将帮助我回答你的问题。
标签: asp.net-mvc authentication oauth-2.0 asp.net-web-api2 owin