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裡已經有了路由事件,可以釋出及傳播一些訊息,那為什麼還需要命令呢?這是因為事件指負責傳送訊息,對訊息如何處理則不管,而命令是有約束力,每個接收者對命令執行統一的行為,比如選單上的儲存,工具欄上的儲存都必須是執行同樣的儲