首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

.NET MVC的简单OpenID身份验证代码

您好!您提到的是一个关于.NET MVC的简单OpenID身份验证代码。以下是一个简单的示例,使用ASP.NET MVC 5和Owin中间件实现OpenID Connect身份验证。

  1. 首先,确保已安装以下NuGet包:
  • Microsoft.Owin.Security.OpenIdConnect
  • Microsoft.Owin.Security.Cookies
  • Microsoft.Owin.Host.SystemWeb
  1. 在Startup.cs文件中,添加以下代码:
代码语言:csharp
复制
using Microsoft.Owin;
using Owin;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.OpenIdConnect;

[assembly: OwinStartup(typeof(YourNamespace.Startup))]

namespace YourNamespace
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

            app.UseCookieAuthentication(new CookieAuthenticationOptions());

            app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
            {
                ClientId = "your_client_id",
                Authority = "https://sts.windows.net/your_tenant_id",
                RedirectUri = "https://localhost:44300/",
                ResponseType = OpenIdConnectResponseType.CodeIdToken,
                Scope = OpenIdConnectScope.OpenIdProfile,
                PostLogoutRedirectUri = "https://localhost:44300/",
                TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
                {
                    ValidateIssuer = false
                },
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    AuthenticationFailed = context =>
                    {
                        // 处理身份验证失败的情况
                        context.HandleResponse();
                        context.Response.Redirect("/Error?message=" + context.Exception.Message);
                        return System.Threading.Tasks.Task.FromResult(0);
                    }
                }
            });
        }
    }
}
  1. 在Global.asax.cs文件中,添加以下代码:
代码语言:csharp
复制
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace YourNamespace
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}
  1. 在AccountController.cs文件中,添加以下代码:
代码语言:csharp
复制
using System.Web.Mvc;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.OpenIdConnect;

namespace YourNamespace.Controllers
{
    public class AccountController : Controller
    {
        public ActionResult SignIn()
        {
            return new ChallengeResult("OpenIdConnect", Url.Action("SignInCallback", "Account"));
        }

        public ActionResult SignInCallback()
        {
            return View();
        }

        public ActionResult SignOut()
        {
            HttpContext.GetOwinContext().Authentication.SignOut(CookieAuthenticationDefaults.AuthenticationType);
            HttpContext.GetOwinContext().Authentication.SignOut(OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType);
            return Redirect("/");
        }

        private class ChallengeResult : HttpUnauthorizedResult
        {
            public ChallengeResult(string provider, string redirectUri)
            {
                LoginProvider = provider;
                RedirectUri = redirectUri;
            }

            public string LoginProvider { get; set; }
            public string RedirectUri { get; set; }

            public override void ExecuteResult(ControllerContext context)
            {
                var properties = new AuthenticationProperties { RedirectUri = RedirectUri };
                context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);
            }
        }
    }
}
  1. 在Views/Shared文件夹中,创建一个名为_LoginPartial.cshtml的新视图部分,并添加以下代码:
代码语言:html
复制
@if (Request.IsAuthenticated)
{
    using (Html.BeginForm("SignOut", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
    {
        @Html.AntiForgeryToken()
        <ul class="nav navbar-nav navbar-right">
            <li>
                @Html.ActionLink("Hello " + User.Identity.Name + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
            </li>
            <li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
        </ul>
    }
}
else
{
    <ul class="nav navbar-nav navbar-right">
        <li>@Html.ActionLink("Register", "Register", "Account", routeValues: null, htmlAttributes: new { id = "registerLink" })</li>
        <li>@Html.ActionLink("Log in", "SignIn", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
    </ul>
}
  1. 在Views/Shared文件夹中,将以下代码添加到_Layout.cshtml文件中:
代码语言:html
复制

<!DOCTYPE html>

<html>

<head>

代码语言:txt
复制
<meta charset="utf-8" />
代码语言:txt
复制
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>@ViewBag.Title - My ASP.NET Application</title>

代码语言:txt
复制
@Styles.Render("~/Content/css")
代码语言:txt
复制
@Scripts.Render("~/bundles/modernizr")

</head>

<body>

代码语言:txt
复制
<div class="navbar navbar-inverse navbar-fixed-top">
代码语言:txt
复制
    <div class="container">
代码语言:txt
复制
        <div class="navbar-header">
代码语言:txt
复制
           <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
代码语言:txt
复制
                <span class="icon-bar"></span>
代码语言:txt
复制
                <span class="icon-bar"></span>
代码语言:txt
复制
                <span class="icon-bar"></span>
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

asp.net mvc 简单项目框架搭建(二)—— Spring.NetMvc简单应用

摘要:上篇写了如何搭建一个简单项目框架上部分,讲了关于Dal和Bll之间解耦相关知识,这篇来把后i面的部分说一说。 上篇讲到DbSession,现在接着往下讲。...接下来说一下spring.net使用方法和步骤: 1.在web.config中添加Spring.Net块配置和Spring.Net容器配置节点 块配置节点: 1 4 ?...这就是Spring.Net使用步骤了。 通过使用Spring.Net,也达到了使UI层和Bll层解耦目的,而且操作较之工厂操作简单多。...好了,一个简单框架第二部分,UI层和Bll层解耦也完成了,关于框架搭建这篇博客就写到这里啦。 我email:3074596466@qq.com 如有谬误,欢迎指正!

1.1K20

ASP.NET Core MVC中如何使用Session实现身份验证

三、ASP.NET Core MVC使用Session方式来实现用户身份验证 这篇文章主要为大家详细介绍了ASP.NET Core MVC使用Session验证用户登录相关资料,具有一定参考价值,...感兴趣小伙伴们可以参考一下,用最简单Session方式记录用户登录状态。...这里阿笨已经把关键性代码展示出来了,感兴趣可以学习一下。 基于Session身份验证实现 这种方式可能是在Asp.Net框架提供几种验证方式之外最常用身份验证方式。...1)、 Asp.Net Core中Session中间件使用 我们需要在用户登录以后记录当前登录用户会话状态,ASP.NET Core 已经内置发布了一个关于会话程序包(Microsoft.Extensions.DependencyInjection...4)、需要验证控制器继承BaseAdminController 比如首页 ? 用户管理页面 ? ? 四、源代码示例下载 扫码关注下方微信公众号,回复d6i3关键字获取源代码下载地址。

3.4K30

ASP.NET MVC 随想录——探索ASP.NET Identity 身份验证和基于角色授权,中级篇

那么在本篇文章中,我将继续ASP.NET Identity 之旅,向您展示如何运用ASP.NET Identity 进行身份验证(Authentication)以及联合ASP.NET MVC 基于角色授权...本文示例,你可以在此下载和预览: 点此进行预览 点此下载示例代码 探索身份验证与授权 在这一小节中,我将阐述和证明ASP.NET 身份验证和授权工作原理和运行机制,然后介绍怎样使用Katana...Account…) Windows Azure Active Directory OpenID 其中又以表单身份验证最为广泛,正如上面提到那样,传统ASP.NET MVC 、Web Form 表单身份验证实际由...FormsAuthenticationModule 处理,而Katana重写了表单身份验证,所以有必要比较一下传统ASP.NET MVC & Web Form 下表单身份验证与OWIN下表单身份验证区别...小结 在这篇文章中,探索了使用ASP.NET Identity 进行身份验证以及联合ASP.NET MVC 基于角色授权。最后实现了对角色管理。

3.4K60

《ASP.NET Core 微服务实战》-- 读书笔记(第10章)

一个最明显问题就是无法支持 Windows 身份验证 长期以来,ASP.NET 开发人员一直沉浸在借助内置 Windows 凭据来保障 Web 应用安全便利中 不管是公有云平台还是私有部署 PaaS...ASP.NET Core Web 应用安全 本章示例中,我们将主要关注 OpenID Connetc 和 JWT 格式 Bearer 令牌 OpenID Connect 基础 OpenID Connect...为一个简单 ASP.NET Core MVC Web 应用提供安全保障功能 创建一个空 Web 应用 $ dotnet new mvc 使用 Auth0 账号配置身份提供方服务 现在可转到 http...,让 ASP.NET Core 使用 Cookie 身份验证OpenID Connect 身份验证 添加一个 account 控制器,提供功能包括登录、注销、以及使用一个视图显示用户身份中所有特征...,包括颁发方签名证书、颁发方名称、接收名称以及令牌时效 在上面的代码中,我们禁用了颁发方和接收方名称验证,其过程都是相当简单字符串对比检查 开启验证时,颁发方和接收方名称必须与令牌中包含颁发方式和接收方式名称严格匹配

1.8K10

.net mvc中一种简单工作流设计

ccflow等就显得杀鸡用牛刀了,这时候我们就得自己写一个简单工作流流程了,一个简单工作流实现,如果没有自己动手做过,单凭看别人博客是很难理解,我就曾在这个问题上掉进大坑。...下面把我对简单工作流实现简单记录一下。...业务描述 本篇我将写一个简单工作流流程,用来实现一个公司员工请假流程,简单来说,可以用下图来描述: ?...业务代码主要以流程起始节点和第二个节点为例进行说明。...以上代码尚不完善,也没有经过测试,可能存在一些bug,重点看思路,我很菜,写也很混乱,觉得写不好,请多多指出我缺点,非常感谢!

45141

简单实现JavascriptMVC

本文作者:IMWeb 谢华良 原文出处:IMWeb社区 未经同意,禁止转载 最近看了一篇文章,“30行代码实现Javascript中MVC”,原文链接:http://www.jqsite.com...提到MVC,基本都会从一些框架开始,比如angularJs之类,要在短时间内透过复杂框架看到某一种设计模式并非是一件容易事情。那么如何通过最简单代码实现一个简单MVC呢?...MVC基础是观察者模式,这是实现Model与View同步关键。 function Model(value) { this....this.watch(function (value) { node = value; }); }; // html代码: // 逻辑代码: (function () {...'); }); 以下是根据我自己理解,封装代码简单实现了双向绑定和模仿了angularjs部分形式: var app = (function(){ var Model = function(

47630

简单实现JavascriptMVC

最近看了一篇文章,“30行代码实现Javascript中MVC”,原文链接:http://www.jqsite.com/notes/1603205925.html ,受益良多,在此记录下学习心得。...提到MVC,基本都会从一些框架开始,比如angularJs之类,要在短时间内透过复杂框架看到某一种设计模式并非是一件容易事情。那么如何通过最简单代码实现一个简单MVC呢?...1.MVC基础是观察者模式,这是实现Model与View同步关键。 function Model(value) { this...._listeners.push(listener); }; // html代码: // 逻辑代码: (function () { var model = new...}); 以下是根据我自己理解,封装代码简单实现了双向绑定和模仿了angularjs部分形式: var app = (function(){ var Model = function(value

92370

Java代码审计 -- 失效身份验证

判断,直接就返回true JWT Token漏洞 失效身份验证会导致攻击者破译密码、密钥或者会话令牌或者利用其他开发漏洞暂时或长久地冒充其他用户身份,导致攻击者可以执行受害者用户任何操作。...wiki/JSON_Web_Token https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html JWT Token 失效身份验证靶场为...可以看到在paylaod中存在admin属性,同时被赋予了false 通过bp抓包,发现重置投票接口为/WebGoat/JWT/votings,知道了接口位置,直接在源代码中搜索 代码如下所示 @...);通过这行代码我们知道,加密密钥为JWT_PASSWORD,追踪JWT_PASSWORD,查看值 public static final String JWT_PASSWORD = TextCodec.BASE64...事先说明,这样是错,原因处在了Secret key上,再回到重置投票代码 ?

1.1K40

Identity Server 4 - Hybrid Flow - MVC客户端身份验证

会从Token端点发行返回:图片搭建Identity Server 4项目Identity Server 4 是OpenID Connect和OAuth 2.0框架, 它主要是为ASP.NET Core..., 首页如下:图片点击discovery document, 它就是我之前打开那个页面.ASP.NET Core MVC 作为客户端首先考虑ASP.NET Core MVC 作为客户端应用情况.ASP.NET...当这个ID Token被验证通过之后, 也就证明了当前用户到底是谁.下面简单对比一下前端和后端通道:图片创建ASP.NET Core MVC 客户端图片创建好后回到IdentityProvider项目,...ID Token之后, 会再次进行验证, 然后会通过它创建Claims Identity, 也就是前面代码User.Claims.这个身份验证凭据都会保存在加密Cookie里面:图片来到About...名字要与之前配置默认方案里名字一致, 这一步就相当于登出MVC客户端.后一行代码作用是跳转回到Identity Provider, 然后用户可以继续登出IDP, 也就是IDP会清除它Cookie

2K20
领券