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

如何将OpenID与窗体身份验证相结合添加到MVC

将OpenID与窗体身份验证相结合添加到MVC的过程可以通过以下步骤实现:

  1. 创建MVC项目:首先,在你喜欢的IDE中创建一个新的MVC项目。
  2. 配置OpenID提供商:在开始之前,你需要注册一个OpenID提供商。常见的OpenID提供商有Google、Facebook和微软。注册并获取你的OpenID提供商的客户端ID和密钥。
  3. 安装OpenID连接库:使用NuGet安装OpenID连接库,例如Microsoft.Owin.Security.OpenIdConnect
  4. 配置OpenID连接:在Startup.cs文件中,添加OpenID连接的配置。以下是一个示例配置:
代码语言:txt
复制
public void Configuration(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType("ExternalCookie");

    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = "ExternalCookie",
        AuthenticationMode = AuthenticationMode.Passive,
        CookieName = ".AspNet.ExternalCookie",
        ExpireTimeSpan = TimeSpan.FromMinutes(5)
    });

    app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
    {
        AuthenticationType = "OpenIdConnect",
        SignInAsAuthenticationType = "ExternalCookie",
        Authority = "https://youropenidprovider.com",
        ClientId = "yourclientid",
        ClientSecret = "yourclientsecret",
        RedirectUri = "https://localhost:44300/signin-oidc",
        PostLogoutRedirectUri = "https://localhost:44300/",
        ResponseType = "code",
        Scope = "openid profile",
        UseTokenLifetime = false,
        Notifications = new OpenIdConnectAuthenticationNotifications
        {
            AuthorizationCodeReceived = async n =>
            {
                var client = new HttpClient();
                var tokenResponse = await client.RequestAuthorizationCodeTokenAsync(new AuthorizationCodeTokenRequest
                {
                    Address = "https://youropenidprovider.com/token",
                    ClientId = "yourclientid",
                    ClientSecret = "yourclientsecret",
                    Code = n.Code,
                    RedirectUri = "https://localhost:44300/signin-oidc"
                });

                var userInfoResponse = await client.GetUserInfoAsync(new UserInfoRequest
                {
                    Address = "https://youropenidprovider.com/userinfo",
                    Token = tokenResponse.AccessToken
                });

                var identity = new ClaimsIdentity(n.AuthenticationTicket.Identity.AuthenticationType);
                identity.AddClaims(userInfoResponse.Claims);
                identity.AddClaim(new Claim("access_token", tokenResponse.AccessToken));

                n.AuthenticationTicket = new AuthenticationTicket(identity, n.AuthenticationTicket.Properties);
            }
        }
    });
}

在上述配置中,你需要替换youropenidprovider.comyourclientidyourclientsecret为你自己的OpenID提供商的相关信息。

  1. 创建登录和注销视图:在MVC的Views文件夹中创建一个Account文件夹,并在其中创建Login.cshtmlLogout.cshtml视图。

Login.cshtml视图中,你可以添加一个链接或按钮,将用户重定向到OpenID提供商的登录页面。例如:

代码语言:txt
复制
@{
    ViewBag.Title = "Login";
}

<h2>Login</h2>

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Login with OpenID" class="btn btn-default" />
        </div>
    </div>
}

Logout.cshtml视图中,你可以添加一个链接或按钮,注销用户并重定向到MVC应用的主页。例如:

代码语言:txt
复制
@{
    ViewBag.Title = "Logout";
}

<h2>Logout</h2>

<p>You have been logged out.</p>
  1. 创建登录和注销控制器方法:在MVC的Controllers文件夹中创建一个AccountController.cs文件,并添加以下方法:
代码语言:txt
复制
public class AccountController : Controller
{
    public ActionResult Login(string returnUrl)
    {
        return Challenge(new AuthenticationProperties { RedirectUri = returnUrl }, "OpenIdConnect");
    }

    public ActionResult Logout()
    {
        Request.GetOwinContext().Authentication.SignOut();
        return RedirectToAction("Index", "Home");
    }
}

Login方法中,Challenge方法将用户重定向到OpenID提供商的登录页面。在Logout方法中,使用SignOut方法注销用户。

  1. 添加登录和注销链接:在MVC应用的导航栏或其他适当的位置,添加一个链接到LoginLogout视图。例如:
代码语言:txt
复制
@if (User.Identity.IsAuthenticated)
{
    <li>@Html.ActionLink("Logout", "Logout", "Account")</li>
}
else
{
    <li>@Html.ActionLink("Login", "Login", "Account")</li>
}

这样,当用户点击登录链接时,他们将被重定向到OpenID提供商的登录页面。成功登录后,他们将被重定向回MVC应用,并以登录身份进行验证。

请注意,以上步骤只是一个示例,并且假设你已经熟悉ASP.NET MVC框架和C#编程语言。在实际的开发过程中,你可能需要根据自己的项目需求进行适当的调整和修改。

对于更详细的OpenID Connect和MVC的集成信息,你可以参考腾讯云的相关文档和资源:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ASP.NET Core的身份认证框架IdentityServer4(9)-使用OpenID Connect添加用户认证

添加OpenID Connect Identity Scopes的支持 OAuth 2.0类似,OpenID Connect也使用Scopes概念。...OAuth相反,OIDC中的范围不代表API,而是代表用户ID,姓名或电子邮件地址等身份信息。...Connect implicit flow 添加客户端 Implicit Flow指的是使用OAuth2的Implicit流程获取Id Token和Access Token 最后一步是将MVC客户端的配置添加到...添加注销 最后一步是给MVC客户端添加注销功能。 使用IdentityServer等身份验证服务,仅清除本地应用程序Cookie是不够的。 此外,您还需要往身份服务器交互,以清除单点登录会话。...OpenID Connect中间件上的Scope属性是您配置哪些Scope将在身份验证期间发送到IdentityServer。

3.4K30
  • .NET开源OpenID和OAuth解决方案Thinktecture IdentityServer

    现代的应用程序看起来像这样: 典型的交互操作包括: 浏览器 web 应用程序进行通信 Web 应用程序 web Api (有时是在他们自己的有时代表用户) 通信 基于浏览器的应用程序 web Api...通信 本机应用程序 web Api 通信 基于服务器的应用程序 web Api 通信 Web Api 和 web Api 交互(有时是在他们自己有时也代表用户) 通常(前端,中间层和后端)的每一层有保护资源和执行身份验证和授权的需求...最常见的身份验证协议是 SAML2p, WS-Federation 和 OpenID Connect —- SAML2p 是最受欢迎并被广泛部署的身份验证协议。...API 访问 应用程序有两种基本方式 —— 使用应用程序的标识,或委派用户的身份API进行沟通。有时这两种方法必须相结合。...OAuth2 是允许应用程序从安全令牌服务请求访问令牌并使用它们Api通信的一个协议。它减少了客户端应用程序,以及 Api 的复杂性,因为可以进行集中身份验证和授权。

    1.8K90

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

    当应用运行于 PaaS 环境中时,Cookie 身份验证仍然适用 不过它也会给应用增加额外负担 首先,Forms 身份验证要求应用对凭据进行维护并验证 也就是说,应用需要处理好这些保密信息的安全保障、...Connetc 和 JWT 格式的 Bearer 令牌 OpenID Connect 基础 OpenID Connect 是 OAuth2 的一个超集,它规定了身份提供方(IDP)、用户和应用之间的安全通信的规范和标准...使用 OIDC 保障 ASP.NET Core 应用的安全 作为本章第一个代码清单,我们将使用 OIDC 为一个简单的 ASP.NET Core MVC Web 应用提供安全保障功能 创建一个空的 Web...应用 $ dotnet new mvc 使用 Auth0 账号配置身份提供方服务 现在可转到 http://auth0.com/,注册完成后进入面板,点击“创建客户端”按钮,请确保应用类型选择为“常规...OpenID Connect 身份验证 添加一个 account 控制器,提供的功能包括登录、注销、以及使用一个视图显示用户身份中的所有特征 using Microsoft.AspNetCore.Authentication.Cookies

    1.8K10

    IdentityServer4 知多少

    HTTP身份验证流程 HTTP提供了一套标准的身份验证框架:服务器可以用来针对客户端的请求发送质询(challenge),客户端根据质询提供身份验证凭证。...然后客户端可以在请求中添加Authorization头进行验证,其Value为身份验证的凭证信息。...Client Credentials 客户端凭证模式,是最简单的授权模式,因为授权的流程仅发生在ClientIdentity Server之间。 该模式的适用场景为服务器服务器之间的通信。...Resources的保护配置 配置完Identity Server,接下来我们该思考如何来保护Resources,以及如何将所有的认证和授权请求导流到Identity Server呢?.../localhost:5000"; options.RequireHttpsMetadata = false; options.ClientId = "mvc

    3K20

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

    OpenID Connect 主要授权方式/流程对比图片实际上OpenID Connect 是完全兼容OAuth 2.0的. ...Claims Scope 是紧密相连的, 是多对一的....现在还需要再修改一下Startup里的ConfigureServices方法, 把上面Config里面的配置都加进去:图片然后修改Startup里的Configure方法, 把IdentityServer添加到...但是如果同一个服务器上有很多应用的话, 这个Scheme的名字不能重复.而把DefaultChanllangeScheme设为"oidc", 这个名字后边配置OpenIdConnect的名字要一样....图片这个过程就和前面图示的一样, 最后从token端点请求到新的ID Token之后, 会再次进行验证, 然后会通过它创建Claims Identity, 也就是前面代码里的User.Claims.这个身份验证的凭据都会保存在加密的

    2K20

    六种Web身份验证方法比较和Flask示例代码

    目录 身份验证授权 HTTP 基本身份验证 流程 优点 缺点 包 代码 资源 HTTP 摘要式身份验证 流程 优点 缺点 包 代码 资源 基于会话的身份验证 流程 优点 缺点 包 代码 资源 基于令牌的身份验证...虽然代码示例和资源适用于 Python 开发人员,但每种身份验证方法的实际说明适用于所有 Web 开发人员。 身份验证授权 身份验证是验证尝试访问受限系统的用户或设备的凭据的过程。...OAuth/OAuth2 和 OpenID 分别是授权和身份验证的流行形式。...通过身份验证后,系统会将您重定向回自动登录的网站。这是使用 OpenID 进行身份验证的示例。它允许您使用现有帐户(通过OpenID提供程序)进行身份验证,而无需创建新帐户。...对于 RESTful API,基于令牌的身份验证是推荐的方法,因为它是无状态的。 如果必须处理高度敏感的数据,则可能需要将 OTP 添加到身份验证流中。 最后,请记住,显示的示例只是触及表面。

    7.4K40

    ASP.NET Core身份认证服务框架IdentityServer4(2)-整体介绍

    一.整体情况 现代应用程序看起来更像这个: 最常见的相互作用: 浏览器Web应用程序的通信 Browser -> Web App Web应用程序Web API通信 基于浏览器的应用程序Web API...本机应用程序Web API进行沟通 基于服务器的应用程序Web API Web APIWeb API通信 通常,每个层(前端、中间层和后端)必须保护资源并实现身份验证或授权——通常针对同一个用户存储区...最常见的示例是Web应用程序,但基于本地和基于js的应用程序也需要进行身份验证。 最常用的认证协议saml2p、WS-Federation和OpenID,saml2p协议是最流行和实际应用最多的。...这个机制降低了客户机应用程序和API的复杂性,因为身份验证和授权可以是集中式的。...Connect和OAuth 2.0端点添加到任意ASP.NET Core应用程序的中间件。

    97620

    ASP.NET Core技术--Identity Server 4 基础

    现代化应用程序架构 浏览器 Web 应用通信,Web 应用 Web API 通信,浏览器 Web API通信,本地应用程 序 Web API 通信,服务器应用程序 Web API 通信,Web...图片 openID Connect OAuth 2.0 OpenID Connect 和 OAuth 2.0 非常相似,事实上,OpenID Connect 是 OAuth 2.0 之上的扩展。...两 个基本的安全问题,即身份验证和 API 访问,被合并为一个协议 - 通常只需一次往返安全令牌 服务。...IdentityServer 是一个中间件,可将符合规范的 OpenID Connect 和 OAuth 2.0 端点添加到 任意 ASP.NET Core 应用程序中。...身份令牌:表示身份验证过程的结果,包括用户标识。 访问令牌:客户端请求访问令牌并将其转发给API用于授权。 授权码:使用授权码获取访问令牌,授权码也有有效期。

    1.2K80

    .NET Core微服务之基于IdentityServer建立授权验证服务

    IdentityServer是将规范兼容的OpenID Connect和OAuth 2.0终结点添加到任意ASP.NET Core应用程序的中间件。...(1)身份验证服务=>官方认证的OpenID Connect实现   (2)单点登录/注销(SSO)   (3)访问受控的API=>为不同的客户提供访问API的令牌,比如:MVC网站、SPA、Mobile...复制完成后,我们的项目结构如下图所示: 4.2 修改DI方法   (1)使用MVC静态文件(由于wwwroot下有很多静态资源文件) public void Configure(IApplicationBuilder...后续我们会创建API和MVC网站来演示如何对其进行授权和访问。...后续还会创建API和MVC网站,来和IdentityServer进行集成,以演示如何对User授予访问API和MVC网站的访问权限。

    1.7K60

    asp.net core IdentityServer4 概述

    概览 现代应用程序看上去大都是这样的: [现代应用程序网络架构] 最常见的交互是: 浏览器Web应用程序通信 Web应用程序Web API通信(有时是独立的,有时是代表用户的) 基于浏览器的应用程序...Web API通信 本机应用程序Web API通信 基于服务器的应用程序Web API通信 Web APIWeb API通信(有时是独立的,有时是代表用户的) 通常,每一层(前端,中间层和后端)都必须保护资源并实施身份验证和...最常见的身份验证协议是SAML2p,WS-Federation和OpenID Connect-SAML2p是最受欢迎和部署最广泛的协议。...身份验证和API访问这两个基本的安全问题被组合成一个协议-通常只需一次往返于安全令牌服务。 我们相信OpenID Connect和OAuth 2.0的结合是在可预见的将来保护现代应用程序的最佳方法。...IdentityServer4如何提供帮助 IdentityServer是将符合规范的OpenID Connect和OAuth 2.0端点添加到任意ASP.NET Core应用程序的中间件。

    1.3K20

    .NET Core实战项目之CMS 第十四章 开发篇-防止跨站请求伪造(XSRFCSRF)攻击处理

    ASP.NET Core 中包含管理身份验证、授权、数据保护、SSL 强制、应用机密、请求防伪保护及 CORS 管理等等安全方面的处理。...ASP.NET Core MVC是如何处理跨站请求伪造(XSRF/CSRF)的?...如果服务器收到经过身份验证的用户的标识不匹配的令牌,将拒绝请求。 该令牌唯一且不可预测。 该令牌还可用于确保正确序列化的一系列的请求 (例如,确保请求序列的: 第 1 页–第 2 页–第 3 页)。... @using (Html.BeginForm("ChangePassword", "Manage")) { ... } 显式添加到防伪令牌而无需使用标记帮助程序...FormFieldName 防伪系统用于呈现防伪令牌在视图中的隐藏的窗体字段的名称。 HeaderName 防伪系统使用的标头的名称。 如果null,系统会认为只有窗体数据。

    4K20

    用户信息端点 UserInfo Endpoint

    前一篇 Identity Server 4 - Hybrid Flow - MVC客户端身份验证: https://www.cnblogs.com/cgzl/p/9253667.html Claims...如果我把这句话删掉, 然后再看看User.Claims的类型和值: 现在有些claim的类型ID Token里面的类型名称是不一样, 也有一些claim不见了: 而加上这句话之后, 现在User...UserInfo Endpoint的官方文档在这: http://openid.net/specs/openid-connect-core-1_0.html#UserInfo 它要求使用GET或者POST...OpenID Connect并没有定义关于角色role相关的scope, 所以我还需要自定义一个scope: 第一个参数是scope的名字, 第二个参数是scope的显示名, 第三个参数是它所包含的claim...然后还需要客户端允许请求“roles”这个scope: IDP这边配置完了, 下面是MVC客户端的配置, 打开MVC的startup, 添加“roles”这个scope: 下面测试, 可以看到在同意页面确实请求了角色

    1.1K10

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

    本文的示例,你可以在此下载和预览: 点此进行预览 点此下载示例代码 探索身份验证授权 在这一小节中,我将阐述和证明ASP.NET 身份验证和授权的工作原理和运行机制,然后介绍怎样使用Katana...理解ASP.NET 表单身份验证授权机制 谈到身份验证,我们接触的最多的可能就是表单身份验证(Form-based Authentication)。...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.5K60

    关于Web验证的几种方法

    基本身份验证相比,由于无法使用 bcrypt,因此密码在服务器上的安全性较低。 容易受到中间人攻击。...** OAuth 和 OpenID** OAuth/OAuth2 和 OpenID 分别是授权和身份验证的流行形式。它们用于实现社交登录,一种单点登录(SSO)形式。...这种方法通常基于会话的身份验证结合使用。 流程 你访问的网站需要登录。你转到登录页面,然后看到一个名为“使用谷歌登录”的按钮。单击该按钮,它将带你到谷歌登录页面。...通过身份验证后,你将被重定向回自动登录的网站。这是使用 OpenID 进行身份验证的示例。它让你可以使用现有帐户(通过一个 OpenID 提供程序)进行身份验证,而无需创建新帐户。...对于 RESTful API,建议使用基于令牌的身份验证,因为它是无状态的。 如果必须处理高度敏感的数据,则你可能需要将 OTP 添加到身份验证流中。 最后请记住,本文的示例仅仅是简单的演示。

    3.8K30
    领券