在ASP.NET Core 2.0中使用Facebook进行身份验证
已经很久没有更新自己的技术博客了,自从上个月末来到天津之后把家安顿好,这个月月初开始找工作,由于以前是做.NET开发的,所以找的还是.NET工作,但是天津这边大多还是针对to B(企业)进行定制开发的,一是技术框架已经成型了,招收几个会CRUD的就好,二是小企业众多,给不了太多的钱,老板们大多比较关心这个程序员的工作年限,什么技术的不怎么关心。所以找工作一直碰壁,有看中的直接说我们给不了这么多,你如果要这个数可以考虑什么的。so,我就直接没考虑。一是钱少,二是技术垃圾,学不到什么东西。
所以前几天开始直接转行了,找java工作,java工作由于自己没有工作经验,二是java技术经理有一种天生的优越感,说实话,很难受。好不容易找到一个有两个部门的公司,现在是负责对这个公司的.NET Core进行技术指导和Java部门进行CRUD。还行吧,先干着再说。
我还是想说,我是一名.Net程序员吧,不论现在做那个方面吧,从我大学开始学.Net开始我是对.Net有感情的。我自身也一直看好.Net Core,也一直拥抱.Net Core的开源。将来也会一直支持.Net Core的发展。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
很多时候我们的系统框架需要集成单点登录来让用户使用第三方应用程序(如Facebook,Twitter,Google、QQ、微信等等)的账户登录我们的系统。在本文中,我将使用Facebook帐户来进行ASP.NET Core应用程序的身份验证。【如果Facebook访问404,请关闭此页面】
⒈
1.安装.Net Core SDK(本文基于.Net Core 2.2)
2.安装相关IDE(例如,VS、VS Code、JetBrains Rider)
⒉创建一个.Net Core MVC应用程序

创建完成后目录如下

⒊使用数据库迁移更新数据库
工具>> NuGet包管理器>>程序包管理器控制台。
Update-Database
迁移完成后可以通过SQL Server对象资源管理器查看自动为什么生成的数据库及表结构

⒋运行项目查看效果并记住URL

⒌创建一个Facebook应用程序
1.访问facebook开发者网站并登录
2.注册为开发者并新建一个应用

3.选择应用场景

4.点击左侧导航菜单中的Facebook登录>设置,在OAuth客户端授权设置页面的“ 有效OAuth跳转URI”字段中输入附加了/signin-facebook的应用程序的基本URL 。

5.单击导航菜单上的设置>基本。将看到我们刚刚创建的Facebook应用程序的应用编号(App ID)和应用密钥(App Secret)值。单击应用密钥字段内的显示按钮以查看密码。记住这两个值,我们将利用这两个值在我们的Web应用程序中配置Facebook身份验证。

⒍配置我们的应用程序以使用Facebook进行身份验证
1.我们需要在应用程序中存储应用编号(App ID)和应用密钥(App Secret)字段值。我们将使用Secret Manager工具来实现此目的。Secret Manager工具是一个项目工具,可用于在开发过程中为.NET Core项目存储密码,API密钥等秘密。使用Secret Manager工具,我们可以将应用程序机密与特定项目相关联,并可以跨多个项目共享它们。
在解决方案资源管理器中项目右键然后从上下文菜单中选择“管理用户机密”。

将打开secrets.json文件,编写以下配置代码。
{
"Authentication:Facebook:AppId": "465373197596195",
"Authentication:Facebook:AppSecret": "421e387a75dd8a3d96ab2ba5c8fb5329"
}
2.打开Startup.cs文件编写ConfigureServices 方法。
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
}); services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddEntityFrameworkStores<ApplicationDbContext>(); services.AddAuthentication().AddFacebook(facebookOptions =>
{
facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
}); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
完整的Startup.cs文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using FbAuth.Data;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; namespace FbAuth
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
} public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
}); services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddEntityFrameworkStores<ApplicationDbContext>(); services.AddAuthentication().AddFacebook(facebookOptions =>
{
facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
}); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
} // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
} app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy(); app.UseAuthentication(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
⒎运行我们的应用程序进行测试



在ASP.NET Core 2.0中使用Facebook进行身份验证的更多相关文章
- ASP.NET Core 1.0 中的依赖项管理
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- 在ASP.NET Core 1.0中如何发送邮件
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:目前.NET Core 1.0中并没有提供SMTP相关的类库,那么要如何从ASP.NE ...
- ASP.NET Core 1.0 中使用 Swagger 生成文档
github:https://github.com/domaindrivendev/Ahoy 之前文章有介绍在ASP.NET WebAPI 中使用Swagger生成文档,ASP.NET Core 1. ...
- 用ASP.NET Core 1.0中实现邮件发送功能
准备将一些项目迁移到 asp.net core 先从封装类库入手,在遇到邮件发送类时发现在 asp.net core 1.0中并示提供SMTP相关类库,于是网上一搜发现了MailKit 好东西一定要试 ...
- 在ASP.NET Core 2.0中使用CookieAuthentication
在ASP.NET Core中关于Security有两个容易混淆的概念一个是Authentication(认证),一个是Authorization(授权).而前者是确定用户是谁的过程,后者是围绕着他们允 ...
- 如何在ASP.NET Core 2.0中使用Razor页面
如何在ASP.NET Core 2.0中使用Razor页面 DotNetCore2017-11-22 14:49 问题 如何在ASP.NET Core 2.0中使用Razor页面 解 创建一个空的项 ...
- ASP.NET Core 3.0中使用动态控制器路由
原文:Dynamic controller routing in ASP.NET Core 3.0 作者:Filip W 译文:https://www.cnblogs.com/lwqlun/p/114 ...
- asp.net core 3.0 中使用 swagger
asp.net core 3.0 中使用 swagger Intro 上次更新了 asp.net core 3.0 简单的记录了一下 swagger 的使用,那个项目的 api 比较简单,都是匿名接口 ...
- 探索 ASP.Net Core 3.0系列三:ASP.Net Core 3.0中的Service provider validation
前言:在本文中,我将描述ASP.NET Core 3.0中新的“validate on build”功能. 这可以用来检测您的DI service provider是否配置错误. 具体而言,该功能可检 ...
随机推荐
- 洛谷P3935 Calculation [数论分块]
题目传送门 格式难调,题面就不放了. 分析: 实际上这个就是这道题的升级版,没什么可讲的,数论分块搞就是了. Code: //It is made by HolseLee on 18th Jul 20 ...
- shell中命令代换$()与`` 、 变量代换${} 、 整数运算$(( )) 的区别
命令代换$()与`` . 变量代换${} . 整数运算$(( )) 1.$( ) 与 ` ` (反引号) 在 bash shell 中,$( ) 与 ` ` (反引号) 都是用来做命令替换用(comm ...
- Mongodb内存管理和使用情况查询
overview MongoDB使用的是内存映射存储引擎,即Memory Mapped Storage Engine,简称MMAP.MMAP可以把磁盘文件的一部分或全部内容直接映射到内存,这样文件中的 ...
- Flume-Replicating Channel Selector 单数据源多出口
使用 Flume-1 监控文件变动,Flume-1 使用 Replicating Channel Selector 将变动内容传递给 Flume-2,Flume-2 负责存储到 HDFS.同时 Flu ...
- Android解决AVD Hardware Buttons 和DPAD无法使用问题
如图所示按键用鼠标点击时无法响应. 解决方案: 以我创建的AVD名为Tablet为例 1.找到用户目录(我的用户目录yummy),然后进入如下目录 mac: ~/yummy/.android/avd/ ...
- C#实现MJPEG服务器
实现流写入,将图像作为mjpeg写入 public class MjpegWriter : IDisposable { , }; , , , }; private string _Boundary; ...
- 【论文学习】Is the deconvolution layer the same as a convolutional layer
结合上升采样upsample和卷积操作.Sub-piexl convolution. Efficient Sub-pixel-convolutional-layers. LR network,即低分辨 ...
- LC 980. Unique Paths III
On a 2-dimensional grid, there are 4 types of squares: 1 represents the starting square. There is e ...
- Pattern Evaluation
对相关性patten质量的常用分析指标有以下这些 其中,X^2 跟 lift不是null-invariant的,也就是说当~A~B项较多时,这两个指标不是很可靠. 据Jiawei Han所言,Kulc ...
- Java相关框架概念以及思想
1.什么是IoC Ioc—Inversion of Control,即“控制反转”,是一种思想, 一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合.更优良的程序. 高内聚低耦合的设计能够让构 ...