zoukankan      html  css  js  c++  java
  • 使用ClaimsIdentity来实现登录授权

    背景:以前做登录时用的都是FormsAuthentication.SetAuthCookie(model.UID, IsRemeber),但是有一个不好,不能存储多个值,有时候我们既想存储登录用户的UID又想存储用户名,以前都是将两者拼接成字符串,用的时候在split出来,比较麻烦,现在用ClaimsIdentity就很方便。

    1、登录时验证通过存储

      ClaimsIdentity ci = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);
                        ci.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, model.UserName));
                        ci.AddClaim(new Claim(ClaimTypes.NameIdentifier, model.UID));
                        ci.AddClaim(new Claim("HspUID", model.HspUID));
                        AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = IsRemeber }, ci);

    需要用到下面的

    复制代码
     private IAuthenticationManager AuthenticationManager
            {
                get
                {
                    return HttpContext.GetOwinContext().Authentication;
                }
            }
    复制代码

    2、获取值

    复制代码
    //获取UID
    User.Identity.GetUserId();
    //获取Name
    User.Identity.Name;
    //获取HspUID
    var claimIdentity = (ClaimsIdentity)User.Identity;
    var HspUID = claimIdentity.FindFirstValue("HspUID");
    复制代码

    3、App_Start里创建Startup.Auth.cs

    复制代码
    using Microsoft.AspNet.Identity;
    using Microsoft.Owin;
    using Microsoft.Owin.Security.Cookies;
    using Owin;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace Yuwell.PressureManage.Web
    {
        public partial class Startup
        {
            public void ConfigureAuth(IAppBuilder app)
            {
    
    
                // 使应用程序可以使用 Cookie 来存储已登录用户的信息
                // 并使用 Cookie 来临时存储有关使用第三方登录提供程序登录的用户的信息
                // 配置登录 Cookie
                app.UseCookieAuthentication(new CookieAuthenticationOptions
                {
                    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                    LoginPath = new PathString("/Account/Login"),              
                });
           
            }
        }
    }
    复制代码

    4、Web项目里添加Startup类

    复制代码
    using Hangfire;
    using Hangfire.MemoryStorage;
    using Microsoft.Owin;
    using Owin;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    [assembly: OwinStartupAttribute(typeof(Test.Web.Startup))]
    namespace Yuwell.PressureManage.Web
    {
        public partial class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                ConfigureAuth(app);
                GlobalConfiguration.Configuration.UseMemoryStorage();
                app.UseHangfireServer();
                app.UseHangfireDashboard();
            }
        }
    }
    复制代码

    需要用到的包

     记得Web.config里configSections节点下加下面的配置

      <system.webServer>
        <modules>
          <remove name="FormsAuthentication" />
        </modules>
      </system.webServer>

    好了,好像就这么多了,结束!!!!!!

  • 相关阅读:
    dubbo入门(一)
    java中文件操作《一》
    Unity 游戏框架搭建 2019 (七) 自定义快捷键
    凉鞋:我所理解的框架 【Unity 游戏框架搭建】
    Unity 游戏框架搭建 2019 (六) MenuItem 复用
    Unity 游戏框架搭建 2019 (五) 打开所在文件夹
    Unity 游戏框架搭建 2019 (四) 导出 UnityPackage
    Unity 游戏框架搭建 2019 (三) 生成文件名到剪切板
    Unity 游戏框架搭建 2019 (二) 文本复制到剪切板
    Unity 游戏框架搭建 2019 (一) 简介与第一个示例文件名的生成
  • 原文地址:https://www.cnblogs.com/icebutterfly/p/7810179.html
Copyright © 2011-2022 走看看