使用 ASP.NET Core 进行的 Microsoft 帐户外部登录设置

您所在的位置:网站首页 aspnetcore-browser-refreshjs 使用 ASP.NET Core 进行的 Microsoft 帐户外部登录设置

使用 ASP.NET Core 进行的 Microsoft 帐户外部登录设置

2023-05-29 03:24| 来源: 网络整理| 查看: 265

使用 ASP.NET Core 进行的 Microsoft 帐户外部登录设置 项目 01/28/2023

作者:Valeriy Novytskyy 和 Rick Anderson

此示例演示如何使用户能够使用在上一页中创建的 ASP.NET Core 6.0 项目,通过其工作、学校或个人 Microsoft 帐户登录。

在 Microsoft 开发人员门户中创建应用 将 Microsoft.AspNetCore.Authentication.MicrosoftAccount NuGet 包添加到项目。 导航到 Azure 门户 - 应用注册页面,并创建或登录 Microsoft 帐户:

如果没有 Microsoft 帐户,请选择“创建一个”。 登录后,你将被重定向到“应用注册”页面:

选择“新建注册” 输入“名称”。 为“支持的帐户类型”选择一个选项。 默认情况下,MicrosoftAccount 包支持使用“任何组织目录中的帐户”或“任何组织目录中的帐户和 Microsoft 帐户”选项创建的应用注册。 若要使用其他选项,请将用于初始化 Microsoft 帐户身份验证的成员MicrosoftAccountOptions设置为AuthorizationEndpointTokenEndpoint应用注册的终结点页上显示的 URL,方法是单击“概述”页上的“概述”页上的“终结点”) (可用。 在“重定向 URI”下,输入你的开发 URL,并附加 /signin-microsoft。 例如,https://localhost:5001/signin-microsoft。 本示例稍后配置的 Microsoft 身份验证方案将自动处理 /signin-microsoft 路由中的请求以实现 OAuth 流。 选择“注册” 创建客户端机密 在左窗格中,选择“证书&机密”。 在“客户端密码”下,选择“新建客户端密码” 添加客户端密码的说明。 选择“添加”按钮。 在“客户端密码”下,复制客户端密码的值。

URI 段 /signin-microsoft 设为 Microsoft 身份验证提供程序的默认回叫。 可以通过类的MicrosoftAccountOptions继承RemoteAuthenticationOptions.CallbackPath属性配置 Microsoft 身份验证中间件时更改默认回调 URI。

存储 Microsoft 客户端 ID 和机密

存储敏感设置,例如 Microsoft 应用程序 (客户端) ID,该 ID 位于使用机密管理器的“证书&机密”页上创建的应用注册和客户端密码的“概述”页上。 对于此示例,请执行以下步骤:

按照启用机密存储中的说明初始化项目,以存储机密。

使用机密密钥 Authentication:Microsoft:ClientId 和 Authentication:Microsoft:ClientSecret 将敏感设置存储到本地机密存储:

dotnet user-secrets set "Authentication:Microsoft:ClientId" "" dotnet user-secrets set "Authentication:Microsoft:ClientSecret" ""

所有平台上的环境变量分层键都不支持 : 分隔符。 __(双下划线):

受所有平台支持。 例如,Bash 不支持 : 分隔符,但支持 __。 自动替换为 : 配置 Microsoft 帐户身份验证

将身份验证服务添加到 Program:

var builder = WebApplication.CreateBuilder(args); var services = builder.Services; var configuration = builder.Configuration; services.AddAuthentication().AddMicrosoftAccount(microsoftOptions => { microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"]; microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"]; });

重 AddAuthentication(IServiceCollection, String) 载设置 DefaultScheme 属性。 重 AddAuthentication(IServiceCollection, Action) 载允许配置身份验证选项,这些选项可用于为不同的目的设置默认身份验证方案。 后续调用以 AddAuthentication 替代以前配置 AuthenticationOptions 的属性。

AuthenticationBuilder 每个身份验证方案只能调用注册身份验证处理程序的扩展方法一次。 存在允许配置方案属性、方案名称和显示名称的重载。

有关 Microsoft 帐户身份验证支持的配置选项的详细信息,请参阅 MicrosoftAccountOptions API 参考。 这可用于请求有关用户的各种信息。

使用 Microsoft 帐户登录 运行应用并选择“登录”。 随即将显示一个使用 Microsoft 登录的选项。 选择该选项,以使用 Microsoft 登录。 你将重定向到 Microsoft 进行身份验证。 使用你的 Microsoft 帐户登录后,系统将提示你允许该应用访问你的信息: 选择 “是” 。 你将重定向到可在其中设置电子邮件的网站。

现在,你已使用 Microsoft 凭据登录。

多个身份验证提供程序

当应用需要多个提供程序时,将提供程序扩展方法链接在后面 AddAuthentication:

services.AddAuthentication() .AddMicrosoftAccount(microsoftOptions => { ... }) .AddGoogle(googleOptions => { ... }) .AddTwitter(twitterOptions => { ... }) .AddFacebook(facebookOptions => { ... }); 使用代理或负载均衡器转发请求信息

如果应用部署在代理服务器或负载均衡器后面,则可能会将某些原始请求信息转发到请求标头中的应用。 此信息通常包括安全请求方案 (https)、主机和客户端 IP 地址。 应用不会自动读取这些请求标头以发现和使用原始请求信息。

方案用于通过外部提供程序影响身份验证流的链接生成。 丢失安全方案 (https) 会导致应用生成不正确且不安全的重定向 URL。

使用转发标头中间件以使应用可以使用原始请求信息来进行请求处理。

有关详细信息,请参阅配置 ASP.NET Core 以使用代理服务器和负载均衡器。

疑难解答

如果 Microsoft 帐户提供程序将你重定向到登录错误页面,请注意 URI 中直接跟在 #(井号标签)之后的错误标题和说明查询字符串参数。

尽管错误消息似乎表明 Microsoft 身份验证存在问题,但最常见的原因是应用程序 URI 与为 Web 平台指定的任何“重定向 URI”均不匹配。

如果未Identity通过调用services.AddIdentityConfigureServices来配置,尝试进行身份验证将导致 ArgumentException:必须提供“SignInScheme”选项。 本示例中使用的项目模板可确保完成此操作。

如果未通过应用初始迁移创建站点数据库,则会显示“处理请求时数据库操作失败”错误。 点击“应用迁移”,创建数据库并刷新以绕过错误继续操作。

后续步骤 本文介绍了如何向 Microsoft 进行身份验证。 可以按照类似的方法向上一页中列出的其他提供程序进行身份验证。 将网站发布到 Azure web 应用后,在 Microsoft 开发人员门户中创建新的客户端密码。 在 Azure 门户中将 Authentication:Microsoft:ClientId 和 Authentication:Microsoft:ClientSecret 设置为应用程序设置。 配置系统设置为从环境变量读取密钥。

此示例演示如何使用户能够使用在上一页中创建的 ASP.NET Core 3.0 项目,通过其工作、学校或个人 Microsoft 帐户登录。

在 Microsoft 开发人员门户中创建应用 将 Microsoft.AspNetCore.Authentication.MicrosoftAccount NuGet 包添加到项目。 导航到 Azure 门户 - 应用注册页面,并创建或登录 Microsoft 帐户:

如果没有 Microsoft 帐户,请选择“创建一个”。 登录后,你将被重定向到“应用注册”页面:

选择“新建注册” 输入“名称”。 为“支持的帐户类型”选择一个选项。 默认情况下,MicrosoftAccount 包支持使用“任何组织目录中的帐户”或“任何组织目录中的帐户和 Microsoft 帐户”选项创建的应用注册。 若要使用其他选项,请将用于初始化 Microsoft 帐户身份验证的成员MicrosoftAccountOptions设置为AuthorizationEndpointTokenEndpoint应用注册的终结点页上显示的 URL,方法是单击“概述”页上的“概述”页上的“终结点”) (可用。 在“重定向 URI”下,输入你的开发 URL,并附加 /signin-microsoft。 例如,https://localhost:5001/signin-microsoft。 本示例稍后配置的 Microsoft 身份验证方案将自动处理 /signin-microsoft 路由中的请求以实现 OAuth 流。 选择“注册” 创建客户端机密 在左窗格中,选择“证书&机密”。 在“客户端密码”下,选择“新建客户端密码” 添加客户端密码的说明。 选择“添加”按钮。 在“客户端密码”下,复制客户端密码的值。

URI 段 /signin-microsoft 设为 Microsoft 身份验证提供程序的默认回叫。 可以通过类的MicrosoftAccountOptions继承RemoteAuthenticationOptions.CallbackPath属性配置 Microsoft 身份验证中间件时更改默认回调 URI。

存储 Microsoft 客户端 ID 和机密

存储敏感设置,例如 Microsoft 应用程序 (客户端) ID,该 ID 位于使用机密管理器的“证书&机密”页上创建的应用注册和客户端密码的“概述”页上。 对于此示例,请执行以下步骤:

按照启用机密存储中的说明初始化项目,以存储机密。

使用机密密钥 Authentication:Microsoft:ClientId 和 Authentication:Microsoft:ClientSecret 将敏感设置存储到本地机密存储:

dotnet user-secrets set "Authentication:Microsoft:ClientId" "" dotnet user-secrets set "Authentication:Microsoft:ClientSecret" ""

所有平台上的环境变量分层键都不支持 : 分隔符。 __(双下划线):

受所有平台支持。 例如,Bash 不支持 : 分隔符,但支持 __。 自动替换为 : 配置 Microsoft 帐户身份验证

将 Microsoft 帐户服务添加到 Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services) { services.AddDbContext(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores(); services.AddRazorPages(); services.AddAuthentication().AddMicrosoftAccount(microsoftOptions => { microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"]; microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"]; }); }

重 AddAuthentication(IServiceCollection, String) 载设置 DefaultScheme 属性。 重 AddAuthentication(IServiceCollection, Action) 载允许配置身份验证选项,这些选项可用于为不同的目的设置默认身份验证方案。 后续调用以 AddAuthentication 替代以前配置 AuthenticationOptions 的属性。

AuthenticationBuilder 每个身份验证方案只能调用注册身份验证处理程序的扩展方法一次。 存在允许配置方案属性、方案名称和显示名称的重载。

有关 Microsoft 帐户身份验证支持的配置选项的详细信息,请参阅 MicrosoftAccountOptions API 参考。 这可用于请求有关用户的各种信息。

使用 Microsoft 帐户登录

运行应用并选择“登录”。 随即将显示一个使用 Microsoft 登录的选项。 选择“Microsoft”时,你会重定向到 Microsoft 进行身份验证。 使用你的 Microsoft 帐户登录后,系统将提示你允许该应用访问你的信息:

点击“是”,你将重定向到可在其中设置电子邮件的网站。

现在,你已使用 Microsoft 凭据登录。

多个身份验证提供程序

当应用需要多个提供程序时,将提供程序扩展方法链接在后面 AddAuthentication:

services.AddAuthentication() .AddMicrosoftAccount(microsoftOptions => { ... }) .AddGoogle(googleOptions => { ... }) .AddTwitter(twitterOptions => { ... }) .AddFacebook(facebookOptions => { ... }); 使用代理或负载均衡器转发请求信息

如果应用部署在代理服务器或负载均衡器后面,则可能会将某些原始请求信息转发到请求标头中的应用。 此信息通常包括安全请求方案 (https)、主机和客户端 IP 地址。 应用不会自动读取这些请求标头以发现和使用原始请求信息。

方案用于通过外部提供程序影响身份验证流的链接生成。 丢失安全方案 (https) 会导致应用生成不正确且不安全的重定向 URL。

使用转发标头中间件以使应用可以使用原始请求信息来进行请求处理。

有关详细信息,请参阅配置 ASP.NET Core 以使用代理服务器和负载均衡器。

疑难解答

如果 Microsoft 帐户提供程序将你重定向到登录错误页面,请注意 URI 中直接跟在 #(井号标签)之后的错误标题和说明查询字符串参数。

尽管错误消息似乎表明 Microsoft 身份验证存在问题,但最常见的原因是应用程序 URI 与为 Web 平台指定的任何“重定向 URI”均不匹配。

如果未Identity通过调用services.AddIdentityConfigureServices来配置,尝试进行身份验证将导致 ArgumentException:必须提供“SignInScheme”选项。 本示例中使用的项目模板可确保完成此操作。

如果未通过应用初始迁移创建站点数据库,则会显示“处理请求时数据库操作失败”错误。 点击“应用迁移”,创建数据库并刷新以绕过错误继续操作。

后续步骤 本文介绍了如何向 Microsoft 进行身份验证。 可以按照类似的方法向上一页中列出的其他提供程序进行身份验证。 将网站发布到 Azure web 应用后,在 Microsoft 开发人员门户中创建新的客户端密码。 在 Azure 门户中将 Authentication:Microsoft:ClientId 和 Authentication:Microsoft:ClientSecret 设置为应用程序设置。 配置系统设置为从环境变量读取密钥。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3