【问题标题】:How to enable external authentication in an ASP.NET Core Razor Pages project?如何在 ASP.NET Core Razor Pages 项目中启用外部身份验证?
【发布时间】:2018-07-28 13:16:11
【问题描述】:

我在 Windows 10 上的 Visual Studio 2017 社区中有一个 ASP.NET Core 项目。我使用 Razor Pages 作为编程模型。我想启用使用 Google 或 Facebook 作为身份验证提供程序的外部 OAuth 2.0 身份验证,以便用户可以使用他们的 Google 或 Facebook 帐户登录。

如何在此类项目中启用 Google 或 Facebook 身份验证?

【问题讨论】:

    标签: c# visual-studio asp.net-core oauth-2.0 asp.net-core-2.0


    【解决方案1】:

    应该明确一点,ASP.NET Core 不是 ASP.NET,Razor Pages 也不是传统的 MVC 模型。如果您想了解更多关于 ASP.NET Core Razor Pages 和 ASP.NET Core MVC 的区别,请see this Q & A

    概述

    • 谷歌认证
      • 创建 Visual Studio 项目
      • 添加初始迁移
      • 启用 SSL/TLS
      • 创建 Google Cloud Platform 项目
      • 创建 OAuth 凭据
      • 启用 Google+ API
      • 添加 API 凭据
      • 使用 OWIN 启用 Google 身份验证
    • 脸书认证
      • 创建 Visual Studio 项目
      • 添加初始迁移
      • 启用 SSL/TLS
      • 创建 Facebook 应用项目
      • 启用 Facebook 登录 API
      • 创建 OAuth 凭据
      • 添加 API 凭据
      • 使用 OWIN 启用 Facebook 身份验证

    谷歌身份验证

    您首先需要一个 Google 帐户,以便在您的应用中使用所需的 API。如果您还没有 Google Cloud Platform 项目,则需要创建一个新项目。然后,您需要为项目创建 OAuth 凭据。这些凭证由一个 ID 和一个秘密组成。这些是用户名和密码的 API 等价物。 Google 将这些称为客户端 ID 和客户端密码。一定要保护好这些,不要与任何人分享。

    创建 Visual Studio 项目


    创建项目时,应选择 ASP.NET Core Web 应用程序模板。在随后的对话框中,您需要选择 Web 应用程序和个人用户帐户选项才能添加 ASP.NET Core 标识。

    1. 转到文件 > 新建 > 项目
    2. 选择已安装 > Visual C# > Web > ASP.NET Core Web 应用程序
    3. 设置名称和位置,然后单击“确定”。
    4. 选择 .NET Core、ASP.NET Core 2.0、Web 应用程序。
    5. 单击更改身份验证,选择个人用户帐户,然后 点击确定。
    6. 单击“确定”创建项目。

    添加初始迁移


    默认情况下,ASP.NET Core 应用程序启用迁移,但您需要添加初始迁移并使用包管理器控制台更新数据库。

    1. 转到工具 > NuGet 包管理器 > 包管理器控制台
    2. 执行Add-Migration Initial
    3. 执行Update-Database

    启用 SSL/TLS


    OAuth 2.0 要求您使用安全通道 HTTPS 协议。所以你需要为你的项目启用 SSL/TLS。如果您使用 Web 应用程序模板并按上述说明添加 ASP.NET Core 标识,则会自动为您配置。

    至少有三种方法可以确保在您的应用中使用 HTTPS。

    • 使用数据注释
    • 将 HTTP 重定向到 HTTPS
    • 在全球范围内强制实施 HTTPS

    您可以将[RequireHttps] 属性添加到控制器、方法或 Razor 页面,但您必须记住在创建新控制器、方法或 Razor 页面时添加该属性。

    另一种方法是将所有 HTTP 请求重定向到 HTTPS。为此,您可以导航到项目根目录中 Startup.cs 文件中的 Configure(IApplicationBuilder app, IHostingEnvironment env) 方法,并在其正文中添加以下 Rewrite 选项。

    var options = new RewriteOptions()
        .AddRedirectToHttps();
    
    app.UseRewriter(options);
    

    第三种方法是在您的应用中全局强制实施 HTTPS。这需要对我们的所有请求 HTTPS,因此所有 HTTP 请求都将被忽略。全局要求 HTTPS 是一种安全最佳做法,建议使用此方法。

    1. 打开项目根目录下的Startup.cs文件。
    2. 导航到ConfigureServices(IServiceCollection services) 方法并在其主体中添加以下过滤器。

      services.Configure<MvcOptions>(options =>
      {
          options.Filters.Add(new RequireHttpsAttribute());
      });
      
    3. 添加Microsoft.AspNetCore.Mvc 命名空间。

    创建 Google Cloud Platform 项目


    如果您没有 Google 帐户,则需要创建一个。如果您之前从未访问过 Google Cloud Platform,系统会提示您创建第一个项目。

    1. 转到Google Cloud Platform 控制台。
    2. 点击页面顶部的下拉菜单。
    3. 点击加号图标创建一个新项目。
    4. 为项目命名并点击创建。

    创建 OAuth 凭据


    1. 确保在顶部选择新创建的项目 Google Cloud Platform 控制台页面。
    2. 在左侧的 API 和服务菜单下,单击凭据 部分。
    3. 单击创建凭据下拉菜单并选择 OAuth 客户端 ID。系统将提示您先配置同意屏幕。
    4. 点击配置同意屏幕。
    5. 至少提供一个产品名称,然后单击保存。你现在将 允许继续创建 OAuth 凭据的过程。
    6. 在凭据页面上选择 Web 应用程序作为应用程序类型。
    7. 转到 Visual Studio 并在解决方案中选择项目名称 探索者。
    8. 转到查看 > 属性页(或按 Shift + F4)。
    9. 复制 URL 并确保它包含 HTTPS 协议。
    10. 返回凭据页面。
    11. 在 Authorized JavaScript origin 字段中,粘贴 URL 你的应用程序。它不应以正斜杠结尾,例如 https://localhost:44324 所以请确保删除任何尾随 正斜杠。
    12. 在授权重定向 URI 中,粘贴您应用的 URL,然后 在末尾附加“signin-google”,例如 https://localhost:44324/signin-google
    13. 单击创建按钮。 ID和秘密将很方便 显示在带有可以单击的复制按钮的模式窗口中 复制字符串。

    启用 Google+ API


    您需要为 Google Cloud Platform 项目启用 Google+ API。

    1. 在左侧的 API 和服务菜单下,单击库 部分。
    2. 搜索“google+”。
    3. 点击结果中的 Google+ API。
    4. 点击启用按钮。

    添加 API 凭据


    启用 API 并获得凭据后,您需要将它们添加到您的应用中。在 ASP.NET Core 项目中有两种方法可以做到这一点。

    • 通过编辑 JSON 文件添加 API 凭据
    • 使用命令行添加凭据

    在 ASP.NET Core 项目中,机密使用机密管理器存储在解决方案文件夹之外。它将机密存储在 AppData 文件夹中的 JSON 文件中。您可以通过右键单击解决方案资源管理器中的项目名称,然后选择管理用户机密轻松找到此文件。

    尽管 JSON 文件只是纯文本文件并且可以手动编辑,但它们实际上是用于应用程序之间的数据交换,应该由应用程序生成和使用。因此,推荐的方法是使用命令行来存储机密。除非您犯了错误并需要手动编辑它。一个常见的错误是将秘密设置为 ID,将 ID 设置为秘密。因此,当您从凭证页面复制和粘贴时,请务必粘贴正确的字符串。

    您需要在项目或解决方案的根目录下打开命令行窗口才能成功执行以下命令。最简单的方法是在解决方案资源管理器中右键单击项目名称并选择打开命令行,然后选择 PowerShell 或 CMD。

    运行以下两个命令,将 id 和 secret 替换为您的实际值。

    dotnet user-secrets set Authentication:Google:ClientId id
    dotnet user-secrets set Authentication:Google:ClientSecret secret
    

    使用 OWIN 启用 Google 身份验证


    ASP.NET Core 项目依赖OWIN 中间件进行外部身份验证。

    1. 打开Startup.cs 文件。
    2. 导航到ConfigureServices(IServiceCollection services) 方法并将以下代码添加到其主体中。

      services.AddAuthentication().AddGoogle(googleOptions =>
      {
          googleOptions.ClientId = Configuration["Authentication:Google:ClientId"];
          googleOptions.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
      });
      
    3. 构建应用程序并运行它。您应该看到使用登录的选项 谷歌。

    Facebook 身份验证

    您首先需要一个 Facebook 帐户,以便在您的应用中使用所需的 API。如果您还没有一个新的 Facebook 应用程序项目,您将需要创建一个。然后,您需要为项目创建 OAuth 凭据。这些凭证由一个 ID 和一个秘密组成。这些是用户名和密码的 API 等价物。 Facebook 将这些称为 App ID 和 App Secret。一定要保护好这些,不要与任何人分享。

    创建 Visual Studio 项目


    创建项目时,应选择 ASP.NET Core Web 应用程序模板。在随后的对话框中,您需要选择 Web 应用程序和个人用户帐户选项才能添加 ASP.NET Core 标识。

    1. 转到文件 > 新建 > 项目
    2. 选择已安装 > Visual C# > Web > ASP.NET Core Web 应用程序
    3. 设置名称和位置,然后单击“确定”。
    4. 选择 .NET Core、ASP.NET Core 2.0、Web 应用程序。
    5. 单击更改身份验证,选择个人用户帐户,然后 点击确定。
    6. 单击“确定”创建项目。

    添加初始迁移


    默认情况下,ASP.NET Core 应用程序启用迁移,但您需要添加初始迁移并使用包管理器控制台更新数据库。

    1. 转到工具 > NuGet 包管理器 > 包管理器控制台
    2. 执行Add-Migration Initial
    3. 执行Update-Database

    启用 SSL/TLS


    OAuth 2.0 要求您使用安全通道 HTTPS 协议。所以你需要为你的项目启用 SSL/TLS。如果您使用 Web 应用程序模板并按上述说明添加 ASP.NET Core 标识,则会自动为您配置。

    至少有三种方法可以确保在您的应用中使用 HTTPS。

    • 使用数据注释
    • 将 HTTP 重定向到 HTTPS
    • 在全球范围内强制实施 HTTPS

    您可以将[RequireHttps] 属性添加到控制器、方法或 Razor 页面,但您必须记住在创建新控制器、方法或 Razor 页面时添加该属性。

    另一种方法是将所有 HTTP 请求重定向到 HTTPS。为此,您可以导航到项目根目录中 Startup.cs 文件中的 Configure(IApplicationBuilder app, IHostingEnvironment env) 方法,并在其正文中添加以下 Rewrite 选项。

    var options = new RewriteOptions()
        .AddRedirectToHttps();
    
    app.UseRewriter(options);
    

    第三种方法是在您的应用中全局强制实施 HTTPS。这需要对我们的所有请求 HTTPS,因此所有 HTTP 请求都将被忽略。全局要求 HTTPS 是一种安全最佳做法,建议使用此方法。

    1. 打开项目根目录下的Startup.cs文件。
    2. 导航到ConfigureServices(IServiceCollection services) 方法并在其主体中添加以下过滤器。

      services.Configure<MvcOptions>(options =>
      {
          options.Filters.Add(new RequireHttpsAttribute());
      });
      
    3. 添加Microsoft.AspNetCore.Mvc 命名空间。

    创建 Facebook 应用项目


    启用 Facebook 登录 API


    创建 OAuth 凭据


    添加 API 凭据


    使用 OWIN 启用 Facebook 身份验证


    services.AddAuthentication().AddFacebook(facebookOptions =>
    {
        facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
        facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
    });
    

    【讨论】:

    • 我猜这就是你所说的详细答案! +1
    猜你喜欢
    • 2019-11-15
    • 2018-10-23
    • 2018-06-15
    • 2019-03-28
    • 2020-01-09
    • 1970-01-01
    • 2018-06-16
    • 2019-02-09
    • 2020-08-31
    相关资源
    最近更新 更多