1. 程式人生 > >indenty 自定義認證 授權。

indenty 自定義認證 授權。

自己寫的認證程式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using AdminSaltSystem.Models;
using System.Security.Cryptography;
using Microsoft.Owin.Security;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using System.Security.Claims;

namespace AdminSaltSystem.Code
{
    public
class adminSigninManager { private IAuthenticationManager AuthenticationManager { get; } SaltSystemEntities db = new SaltSystemEntities(); public adminSigninManager(IAuthenticationManager authenticationManager) { AuthenticationManager = authenticationManager; } public
SignInStatus Signin(string name, string password, bool RememberMe) { if (name == null || password == null) return SignInStatus.Failure; //檢測賬戶密碼是否能夠登入 var md5password = GetMD5(password); var @operator = db.Tbl_Operator.Where(m => [email protected]
operator.Trim() == name.Trim() && m.opassword== md5password); if (@operator.Count() <= 0) return SignInStatus.Failure; var op = @operator.FirstOrDefault(); SigninSession(op.ID.ToString(),[email protected]operator,op.Tbl_RoleSet.RoleName,op.Tbl_RoleSet.Permit_JSON,RememberMe); return SignInStatus.Success; } private void SigninSession(string id,string name,string role,string permissionlist,bool rememberme) { ClaimsIdentity claimsIdentity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.NameIdentifier, ClaimTypes.Role); claimsIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, id, "http://www.w3.org/2001/XMLSchema#string"));//如果有@Html.AntiForgeryToken()參與下面的ClaimTypes.NameIdentifier必須有 claimsIdentity.AddClaim(new Claim(ClaimTypes.Name, name, "http://www.w3.org/2001/XMLSchema#string"));//可選 只是如果沒有ClaimTypes.Name 就找不到名字 claimsIdentity.AddClaim(new Claim("permissionList", permissionlist, "http://www.w3.org/2001/XMLSchema#string"));////可選 同上 claimsIdentity.AddClaim(new Claim("Role", role, "http://www.w3.org/2001/XMLSchema#string"));////可選 同上 claimsIdentity.AddClaim(new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "Custom Identity", "http://www.w3.org/2001/XMLSchema#string"));//如果有@Html.AntiForgeryToken()參與下面的ClaimTypes.NameIdentifier必須有 AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = rememberme }, claimsIdentity); } public void SignOut() { AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); } #region 幫助程式 private static string GetMD5(string myString) { MD5 md5 = new MD5CryptoServiceProvider(); byte[] fromData = System.Text.Encoding.Unicode.GetBytes(myString); byte[] targetData = md5.ComputeHash(fromData); string byte2String = null; for (int i = 0; i < targetData.Length; i++) { byte2String += targetData[i].ToString("x"); } return byte2String; } #endregion } }

呼叫方法是在 accountcontroller.cs 裡


        private IAuthenticationManager AuthenticationManager
        {
            get
            {

                return HttpContext.GetOwinContext().Authentication;

            }
        }

//------------------------------------------------------

 AdminSaltSystem.Code.adminSigninManager SM = new AdminSaltSystem.Code.adminSigninManager(AuthenticationManager);
            var result=SM.Signin(model.username,model.password,model.RememberMe);
            switch (result)
            {
                case SignInStatus.Success:
                    return RedirectToLocal("/auth/index");
                case SignInStatus.LockedOut:
                    return View("Lockout");
                case SignInStatus.RequiresVerification:
                    return RedirectToAction("SendCode", new { ReturnUrl = "/auth/index", RememberMe = model.RememberMe });
                case SignInStatus.Failure:
                    ModelState.AddModelError("", "登入失敗。");
                    return View(model);
                default:
                    ModelState.AddModelError("", "無效的登入嘗試。");
                    return View(model);
            }

獲取認證資訊的方法


using System.Security.Principal;
using System.Security.Claims;


//////////////////////////////
///////////////////////

            ClaimsIdentity xxx = new ClaimsIdentity(user.Identity);//user為上下文中中的user型別為IPrincipal 
            var myclaims = xxx.Claims.Where(m => m.Type == "permissionList").First().Value;

            JObject myjobjct = JObject.Parse(myclaims);
            var names = (string)myjobjct["name"];


            foreach (var x in myjobjct)
            {

            }
            var list = new List<string>();
            return list;



}

呼叫方法只要找到上下文裡的user就可以

////////在網上找到的相關資料用於學習、、、、、、、

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Http.Authentication;
using Microsoft.AspNet.Authorization;
using Microsoft.AspNet.Http.Features.Authentication;
using Microsoft.AspNet.Authentication.Cookies;
using System.Security.Claims;

namespace IdentitySample.Controllers
{
    public class AccountController : Controller
    {
        // Methods
        public IActionResult Login(string returnUrl = null)
        {
            // ViewData
            this.ViewData["ReturnUrl"] = returnUrl;

            // Return
            return View();
        }

        public async Task<IActionResult> PasswordLogin(string userId, string password, string returnUrl = null)
        {
            // Login 
            var existingIdentitySystem = new ExistingIdentitySystem();
            if (existingIdentitySystem.PasswordSignIn(userId, password) == false)
            {
                throw new InvalidOperationException();
            }

            // ExistingUser
            var existingUser = existingIdentitySystem.GetUserById(userId);
            if (existingUser == null) throw new InvalidOperationException();

            // ApplicationUser
            var applicationIdentity = new ClaimsIdentity(IdentityOptions.Current.ApplicationCookieAuthenticationScheme, ClaimTypes.Name, ClaimTypes.Role);
            applicationIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, existingUser.Id));
            applicationIdentity.AddClaim(new Claim(ClaimTypes.Name, existingUser.Name));

            var applicationUser = new ClaimsPrincipal(applicationIdentity);

            // Cookie
            await this.HttpContext.Authentication.SignInAsync(IdentityOptions.Current.ApplicationCookieAuthenticationScheme, applicationUser);
            await this.HttpContext.Authentication.SignOutAsync(IdentityOptions.Current.ExternalCookieAuthenticationScheme);

            // Return
            return Redirect(returnUrl);
        }

        public IActionResult ExternalLogin(string externalProvider, string returnUrl = null)
        {
            // AuthenticationProperties
            var authenticationProperties = new AuthenticationProperties();
            authenticationProperties.Items.Add("ExternalProvider", externalProvider);
            authenticationProperties.RedirectUri = Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl });

            // Return
            return new ChallengeResult(externalProvider, authenticationProperties);
        }

        public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null)
        {
            // AuthenticateContext
            var authenticateContext = new AuthenticateContext(IdentityOptions.Current.ExternalCookieAuthenticationScheme);
            await this.HttpContext.Authentication.AuthenticateAsync(authenticateContext);

            // AuthenticateInfo           
            string userId = authenticateContext.Principal.FindFirst(ClaimTypes.Email).Value;
            string externalProvider = authenticateContext.Properties["ExternalProvider"] as string;

            // Login 
            var existingIdentitySystem = new ExistingIdentitySystem();
            if (existingIdentitySystem.ExternalSignIn(userId, externalProvider) == false)
            {
                throw new InvalidOperationException();
            }

            // ExistingUser
            var existingUser = existingIdentitySystem.GetUserById(userId);
            if (existingUser == null) throw new InvalidOperationException();

            // ApplicationUser
            var applicationIdentity = new ClaimsIdentity(IdentityOptions.Current.ApplicationCookieAuthenticationScheme, ClaimTypes.Name, ClaimTypes.Role);
            applicationIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, existingUser.Id));
            applicationIdentity.AddClaim(new Claim(ClaimTypes.Name, existingUser.Name));

            var applicationUser = new ClaimsPrincipal(applicationIdentity);

            // Cookie
            await this.HttpContext.Authentication.SignInAsync(IdentityOptions.Current.ApplicationCookieAuthenticationScheme, applicationUser);
            await this.HttpContext.Authentication.SignOutAsync(IdentityOptions.Current.ExternalCookieAuthenticationScheme);

            // Return
            return Redirect(returnUrl);
        }
    }
}

相關推薦

indenty 定義認證 授權

自己寫的認證程式 using System; using System.Collections.Generic; using System.Linq; using System.Web; using AdminSaltSystem.Models; usi

ocelot 定義認證授權

ade ons regex 定義 cat 是否 檢查 urn 方便 原文:ocelot 自定義認證和授權ocelot 自定義認證和授權 Intro 最近又重新啟動了網關項目,服務越來越多,每個服務都有一個地址,這無論是對於前端還是後端開發調試都是比較麻煩的,前端需要定義

每天一個JS 小demo之定義滾動條主要知識點:事件應用

prevent 數據 滾動 sca listener 視頻 希望 特效 poi <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>D

shiro授權定義realm授權(七)

qbc mtp jbd red es6 sil llb wmi sin 1.授權流程 2. 三種授權方法          Shiro 支持三種方式的授權: 編程式:通過寫if/else 授權代碼塊完成: Subject subject = SecurityU

列表(list)的增、刪、改、查range定義數組1.24日

次數 += int pan adb lex col play digi join # s=‘alexwusir‘ # print(‘*‘.join(s)) # 輸出:a*l*e*x*w*u*s*i*r View Code 計算用戶輸入的有多少整數?

springSecurity定義認證配置

pojo property ood 目錄 spring註解 web tex poj uri 上一篇講了springSecurity的簡單入門的小demo,認證用戶是在xml中寫死的。今天來說一下自定義認證,讀取數據庫來實現認證。當然,也是非常簡單的,因為僅僅是讀取數據庫,權

Linux下安裝配置 http ,修改本機中http伺服器主頁,定義顯示內容

HTTP(Hyper Text Transfer Protocol) 超文字傳輸協議,位於osi模型中的應用層。               安裝:可以使用yum等多種方式安裝,最方便的自然是yum安裝(Redhat需

如何使用shiro認證授權

這裡是修真院後端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】 八個方面深度解析後端知識/技能,本篇分享的是: 【如何使用shiro認證授權。】   【修真院java小課堂】如何使用shir

spring boot 掃描不到定義的Controller

    springboot專案的特色,這裡就不多說了,框架搭建是非常簡單的;小編在搭建成功之後遇到了如下問題:     掃描不到自定義的controller。。。     文章介紹兩個可能的問題方案: &nbs

微信公共號定義菜單

繞過 ram ons sta direct get 生成 lencod _id /**微信生成菜單 * [addMennu description] */ public function addMennu(){ $token =

精通Spring Boot——第十八篇:定義認證流程

前兩篇簡單介紹了一下使用Spring Security 使用Http Basic登入,以及Spring Security如何自定義登入邏輯。這篇文章主要介紹如何使用handler來定義認證相關的流程。 先做一些自定義的操作,如配置自定義登入頁,配置登入請求URL等。 當我們使用Spring Security時

Shiro安全框架--定義認證

上一篇簡單的介紹了Shiro的基礎認證,這一篇就簡單的舉個自定義認證的例子 1.和之前一樣先引入依賴: <!--匯入shiro-web的依賴 --> <dependency> <groupId&

07.Django中的定義認證方式和許可權的設計與使用

一:自定義認證方式 前提條件 1:建立簡單的django工程 2:簡單的login模組 3:基礎的配置假設已經完成 以上如果哪點不明白,請檢視前邊章節誒的內容 login/views.py: c

ffmpeg框架閱讀筆記二 : 尋找AVIOContext初始化過程,定義初始化

在avformat_open_input中,有一個 init_input函式,它的作用是開啟輸入媒體,初始化所有與媒體讀寫有關的結構們,例如/AVIOContext,AVInputFormat等等。分析init_input函式,找出AVIOContext的初始化

關於父子元件,router-view和定義元件名

        做了這麼多路由跳轉了,但是今天下午突發奇想,寫一個父子元件以及自定義元件跳轉的小例子。我理解的,當需要點選按鈕路由跳轉的時候,用router-view,當作為預設子元件,只是顯示的時候用自定義元件名。專案地址:https://github.com/nihaoh

資料庫儲存為null時,定義字元標識使轉為json資料後,列不丟失或有undefined

當查詢的資料中,列mno為空時,用“-”代替,也可以用中文之類代替,比如“暫空”,這裡採用“-”代替。 只需要在sql語句新增IFNULL(m.mno,’-‘) AS mno進行處理即可,例如: SELECT IFNULL(m.mflighno,'-') AS mflighno,m.*

Django2.0官方文件學習-定義認證

The authentication that comes with Django is good enough for most common cases, but you may have needs not met by the ou

asp.net core 2.0 web api基於JWT定義策略授權

JWT(json web token)是一種基於json的身份驗證機制,流程如下:   通過登入,來獲取Token,再在之後每次請求的Header中追加Authorization為Token的憑據,服務端驗證通過即可能獲取想要訪問的資源。關於JWT的技術,可參考網路上

[Spring Security] 表單登入通過配置定義登入頁面,以及定義認證成功/失敗處理機制

1.目錄結構2.配置自定義登入頁通過配置SecurityProperties,MyProperties,SecurityCoreConfig來讀取resources資料夾下application.properties中相關配置項。SecurityProperties:pack

WPF 命令(RoutedCommand定義命令,實現 ICommand 介面定義命令)推薦使用實現 ICommand 介面定義命令

一、命令基本元素及關係       我們已經知道WPF裡已經有了路由事件,可以釋出及傳播一些訊息,那為什麼還需要命令呢?這是因為事件指負責傳送訊息,對訊息如何處理則不管,而命令是有約束力,每個接收者對命令執行統一的行為,比如選單上的儲存,工具欄上的儲存都必須是執行同樣的儲