久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

asp.net core 認證和授權實例詳解

瀏覽:300日期:2022-06-08 10:52:40
目錄
  • 正文
    • 認證是什么?
    • 授權是什么?
    • 認證和授權的關系?

正文

使用asp.net core 開發應用系統過程中,基本上都會涉及到用戶身份的認證,及授權訪問控制,因此了解認證和授權流程也相當重要,下面通過分析asp.net core 框架中的認證和授權的源碼來分析認證、授權的原理及認證和授權的關系。

認證是什么?

認證是應用系統識別當前訪問者的身份的一個過程,當應用系統接收到瀏覽器的請求后,通常會根據請求中攜帶的一些用戶的的關鍵信息來識別當前登錄用戶的身份,通過解析這些信息,對用戶進行合法性校驗并進行解密,如果校驗通過,則表示認證通過,應用系統會將認證通過后的用戶信息存儲到Http請求上下文中,以便后續業務使用及授權流程中使用。

asp.net core中通常將認證信息加密后存儲到cookie中,每次訪問需要認證的頁面時將這些cookie信息發送到應用系統,以便應用系統識別訪問者的身份,也就是經典的Cookie認證。

需要注意的是:認證僅僅只是識別當前訪問用戶的身份,并不負責具體的訪問權限控制邏輯,如不具備某個資源的訪問權限返回403,未登錄返回401等,這些均由授權流程來控制。

asp.net core 中負責認證流程的中間件是AuthenticationMiddleware 類,以下是asp.net core 3.1 的源代碼,可以看到,先遍歷所有實現了IAuthenticationRequestHandler接口的認證方案,并調用IAuthenticationRequestHandler接口的HandleRequestAsync方法,如果認證通過,則不再繼續往下執行,并且此時HttpContext.User已經包含認證后的用戶信息,如果所有實現 IAuthenticationRequestHandler 接口的認證方案,都未能對當前訪問用戶進行身份認證,則使用默認的認證方案進行認證(也就是:GetDefaultAuthenticateSchemeAsync返回的認證方案),可以看到認證流程即使沒能識別當前訪問者的用戶身份,也會繼續執行下一個流程,(尾部:await _next(context);)

public class AuthenticationMiddleware
{
	private readonly RequestDelegate _next;
	public IAuthenticationSchemeProvider Schemes
	{
		get;
		set;
	}
	public AuthenticationMiddleware(RequestDelegate next, IAuthenticationSchemeProvider schemes)
	{
		if (next == null)
		{
			throw new ArgumentNullException("next");
		}
		if (schemes == null)
		{
			throw new ArgumentNullException("schemes");
		}
		_next = next;
		Schemes = schemes;
	}
	public async Task Invoke(HttpContext context)
	{
		context.Features.Set((IAuthenticationFeature)new AuthenticationFeature
		{
			OriginalPath = context.Request.Path,
			OriginalPathBase = context.Request.PathBase
		});
		IAuthenticationHandlerProvider handlers = context.RequestServices.GetRequiredService<IAuthenticationHandlerProvider>();
		foreach (AuthenticationScheme item in await Schemes.GetRequestHandlerSchemesAsync())
		{
			IAuthenticationRequestHandler authenticationRequestHandler = (await handlers.GetHandlerAsync(context, item.Name)) as IAuthenticationRequestHandler;
			bool flag = authenticationRequestHandler != null;
			if (flag)
			{
				flag = await authenticationRequestHandler.HandleRequestAsync();
			}
			if (flag)
			{
				return;
			}
		}
		AuthenticationScheme authenticationScheme = await Schemes.GetDefaultAuthenticateSchemeAsync();
		if (authenticationScheme != null)
		{
//內部調用IAuthenticationService進行認證。
			AuthenticateResult authenticateResult = await context.AuthenticateAsync(authenticationScheme.Name);
			if (authenticateResult?.Principal != null)
			{
				context.User = authenticateResult.Principal;
			}
		}
		await _next(context);
	}
}

授權是什么?

授權是確定當前訪問用戶是否具備訪問某個系統資源權限的過程,對于需要授權才能訪問的系統資源,通常通過[Authorize]特性來標識,通過該特性,可以指定該資源需要哪個用戶角色才能訪問、必須符合哪個授權策略才能訪問,以及訪問該資源時采用的用戶認證方案是什么,當用戶訪問系統的某個API或者頁面時,授權流程會檢查當前用戶是否具備該API或者頁面的訪問權限,如果授權檢查失敗,那么會判斷當前用戶是否已經認證通過,如果認證通過,但無訪問該資源的權限,那么返回403(禁止訪問),如果未認證,那么直接返回401(未認證),表示需要用戶登錄認證后在進行訪問,需要注意的是:檢查是否具備訪問權限之前會先進行用戶身份的認證,至于用什么認證方案就看AuthorizeAttribute有沒有指定特定的認證方案,如果沒有,則直接采用認證流程的認證成功的身份信息。

asp.net core 中,授權流程的執行是通過AuthorizationMiddleware類來完成的,以下是asp.net core 3.1中的源碼。

// Microsoft.AspNetCore.Authorization.AuthorizationMiddleware
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Authorization.Policy;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
public class AuthorizationMiddleware
{
	private const string AuthorizationMiddlewareInvokedWithEndpointKey = "__AuthorizationMiddlewareWithEndpointInvoked";
	private static readonly object AuthorizationMiddlewareWithEndpointInvokedValue = new object();
	private readonly RequestDelegate _next;
	private readonly IAuthorizationPolicyProvider _policyProvider;
	public AuthorizationMiddleware(RequestDelegate next, IAuthorizationPolicyProvider policyProvider)
	{
		_next = next ?? throw new ArgumentNullException("next");
		_policyProvider = policyProvider ?? throw new ArgumentNullException("policyProvider");
	}
	public async Task Invoke(HttpContext context)
	{
		if (context == null)
		{
			throw new ArgumentNullException("context");
		}
		Endpoint endpoint = context.GetEndpoint();
		if (endpoint != null)
		{
			context.Items["__AuthorizationMiddlewareWithEndpointInvoked"] = AuthorizationMiddlewareWithEndpointInvokedValue;
		}
//獲取訪問當前資源所需要的所有角色權限,及授權策略,以及訪問該資源時需要使用的認證方案列表,并統一合并到一個AuthorizationPolicy對象中。
		IReadOnlyList<IAuthorizeData> authorizeData = endpoint?.Metadata.GetOrderedMetadata<IAuthorizeData>() ?? Array.Empty<IAuthorizeData>();
		AuthorizationPolicy policy = await AuthorizationPolicy.CombineAsync(_policyProvider, authorizeData);
		if (policy == null)
		{
			await _next(context);
			return;
		}
		IPolicyEvaluator policyEvaluator = context.RequestServices.GetRequiredService<IPolicyEvaluator>();
//通過IPolicyEvaluator.AuthenticateAsync()方法,對當前訪問者進行認證,至于使用哪種方案認證,根據該資源要求使用的認證方案來,如果沒有指定,
//則使用默認認證方案進行認證。
		AuthenticateResult authenticationResult = await policyEvaluator.AuthenticateAsync(policy, context);
//如果包含實現了IAllowAnonymous接口的特性,則不進行授權檢查。
		if (endpoint?.Metadata.GetMetadata<IAllowAnonymous>() != null)
		{
			await _next(context);
			return;
		}
//這里調用AuthorizeAsync進行授權檢查,注意,這里將上一步認證結果authenticationResult也傳到了授權檢查方法內部。
		PolicyAuthorizationResult policyAuthorizationResult = await policyEvaluator.AuthorizeAsync(policy, authenticationResult, context, endpoint);
		//檢查授權結果,如果是未登錄,則返回401未認證,讓用戶進行登錄,如果該資源指定了特定的認證方案,則調用特定認證方案的Challenge方法,
//否則調用默認認證方案的Challenge方法,通常Challenge做的事情就是重定向用戶的瀏覽器到登錄頁面或者對于ajax異步請求返回401.
if (policyAuthorizationResult.Challenged)
		{
			if (policy.AuthenticationSchemes.Any())
			{
				foreach (string authenticationScheme in policy.AuthenticationSchemes)
				{
					await context.ChallengeAsync(authenticationScheme);
				}
			}
			else
			{
				await context.ChallengeAsync();
			}
		}
//如果當前訪問者用戶身份認證通過,但是不被允許訪問該資源的權限,那么默認返回401(禁止訪問)給瀏覽器端,通常對于未授權的訪問請求,應用常常的做法是將用戶的瀏覽器重定向到禁止訪問的提示頁面,或者對于ajax異步請求來說,通常返回403狀態碼,和上面未認證情況一樣,如果該資源指定了特定的認證方案,那么會調用特定認證方案的Forbid方法,否則調用默認認證方案的Forbid方法。
		else if (policyAuthorizationResult.Forbidden)
		{
			if (policy.AuthenticationSchemes.Any())
			{
				foreach (string authenticationScheme2 in policy.AuthenticationSchemes)
				{
					await context.ForbidAsync(authenticationScheme2);
				}
			}
			else
			{
				await context.ForbidAsync();
			}
		}
		else
		{
			await _next(context);
		}
	}
}

IPolicyEvaluator接口實現類 PolicyEvaluator類代碼如下,該類主要是負責授權流程中的認證和授權。

// Microsoft.AspNetCore.Authorization.Policy.PolicyEvaluator
using System;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Authorization.Policy;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Internal;
public class PolicyEvaluator : IPolicyEvaluator
{
	private readonly IAuthorizationService _authorization;
	public PolicyEvaluator(IAuthorizationService authorization)
	{
		_authorization = authorization;
	}
	public virtual async Task<AuthenticateResult> AuthenticateAsync(AuthorizationPolicy policy, HttpContext context)
	{
//這里去判斷當前資源是否有要求特定的認證方案進行認證,如果有指定特定的認證方案,則分別對每個認證方案進行認證,并把認證后的用戶信息進行合并
//最終存儲到HttpContext.User屬性中,并返回認證成功,如果沒有指定認證方案,則使用認證流程中已經認證的用戶信息作為認證結果返回,
//從這里可以看出,認證流程還是很有必要的,在資源沒有指定認證方案的前提下,認證流程為授權流程提供當前訪問者的身份信息,以便執行是否具備相應資源的訪問權限檢查,否則就直接進入Challenge流程將要求用戶先進行身份認證了
		if (policy.AuthenticationSchemes != null && policy.AuthenticationSchemes.Count > 0)
		{
			ClaimsPrincipal newPrincipal = null;
			foreach (string authenticationScheme in policy.AuthenticationSchemes)
			{
				AuthenticateResult authenticateResult = await context.AuthenticateAsync(authenticationScheme);
				if (authenticateResult != null && authenticateResult.Succeeded)
				{
					newPrincipal = SecurityHelper.MergeUserPrincipal(newPrincipal, authenticateResult.Principal);
				}
			}
			if (newPrincipal != null)
			{
				context.User = newPrincipal;
				return AuthenticateResult.Success(new AuthenticationTicket(newPrincipal, string.Join(";", policy.AuthenticationSchemes)));
			}
			context.User = new ClaimsPrincipal(new ClaimsIdentity());
			return AuthenticateResult.NoResult();
		}
		return (context.User?.Identity?.IsAuthenticated).GetValueOrDefault() ? AuthenticateResult.Success(new AuthenticationTicket(context.User, "context.User")) : AuthenticateResult.NoResult();
	}
//resource為EndPoint對象。
	public virtual async Task<PolicyAuthorizationResult> AuthorizeAsync(AuthorizationPolicy policy, AuthenticateResult authenticationResult, HttpContext context, object resource)
	{
		if (policy == null)
		{
			throw new ArgumentNullException("policy");
		}
//這里調用IAuthorizationService.AuthorizeAsync方法進行授權檢查,默認實現類為:DefaultAuthorizationService。
		if ((await _authorization.AuthorizeAsync(context.User, resource, policy)).Succeeded)
		{
			return PolicyAuthorizationResult.Success();
		}
//下面這句表示如果授權檢查失敗的情況下是進入Forbid流程還是進入Challenge流程,可以看到如果認證成功,那么表示無權限訪問進入Forbid流程。
//如果未認證,則進入Challenge流程,引導用戶登錄認證。
		return authenticationResult.Succeeded ? PolicyAuthorizationResult.Forbid() : PolicyAuthorizationResult.Challenge();
	}
}

認證和授權的關系?

授權檢查之前都會先執行用戶身份的認證,不過這里的認證流程只有在被訪問的資源有指定特定的認證方案時才會執行,否則直接采用統一認證流程中的產生的認證信息。

可以理解為認證流程一方面是為了告訴應用系統當前訪問者的身份,一方面是為了給授權檢查時識別用戶的身份信息,當資源沒有指定采用何種認證方案時,授權流程將會采用統一認證流程里認證通過產生的用戶信息,如果不啟用認證流程,并且被訪問的資源也沒有指定特定的認證方案對訪問者身份進行認證時,那么最終訪問該資源時還是會被要求先登錄認證,因此認證流程的另外一個用途就是為授權流程提供默認的用戶認證信息。

總結起來說,

認證流程主要有如下幾個作用:

  • 識別系統訪問者的身份信息,認證通過后提供給后續業務使用。
  • 給授權流程提供訪問者身份信息(資源沒有指定特定認證方案時,采用默認認證方案認證通過的用戶信息)。
  • 實現授權失敗后的處理邏輯,比如授權檢查失敗后返回的 401(未認證),403(禁止訪問)等最終都是認證方案的 ChallegeAsync方法以及ForbidAsync方法來處理,這些方法是IAuthenticationHandler里面定義的,這些流程在授權失敗為401/403的時候分別被授權流程調用。

授權流程主要如下幾個作用:

  • 授權流程主要是檢查當前用戶是否具備指定資源的訪問權限,如果授權檢查失敗,如401(未認證),403(禁止訪問),那么最終會分別調用認證方案的ChallegenAsync和ForbidAsync方法,也就是說,授權流程側重于授權失敗后的流程控制。
  • 授權流程另外一個主要的任務是檢查授權策略是否均能檢驗通過,如果一個資源通過AuthorizeAttribute的Policy屬性指定了一個或者多個授權策略,那么必須所有授權策略都驗證通過才算授權成功,如果未指定授權策略,那么就驗證默認的授權策略是否能檢驗通過,默認的授權策略則是要求必須用戶認證通過才允許訪問資源。

授權流程本質上就是遍歷所有注入到容器中的IAuthorizationHandler(微軟默認在AddAuthorization的時候向容器注入了:PassThroughAuthorizationHandler,這個授權處理程序遍歷AuthorizationHandlerContext.Requirements中所有實現了IAuthorizationHandler的Requirement類,并調用其HandleAsync方法來檢查當前Requirement是否能校驗通過),并對訪問指定資源所要滿足的所有策略中包含的Requirement進行驗證,如果所有策略包含的Requirement都驗證通過,那么表示授權成功,這里的Requirement是指實現了IAuthorizationRequirement的類,這個接口是一個空接口,用于標記Requirement使用。

以上就是asp.net core 認證和授權實例詳解的詳細內容,更多關于asp.net core 認證授權的資料請關注其它相關文章!

標簽: ASP.NET
相關文章:
主站蜘蛛池模板: 欧美黄色一区 | 中文字幕亚洲精品 | 成人二区 | 亚洲一区在线日韩在线深爱 | 成人av免费在线观看 | 亚洲精品第一区在线观看 | www嫩草 | 久草新免费 | 中文字幕在线观看 | 日韩中文字幕免费在线 | 视频专区一区二区 | xxxx网 | 久久久精品高清 | 国产欧美中文字幕 | 一区二区三区四区在线 | 亚洲一区在线视频 | 久久久久综合狠狠综合日本高清 | 欧美国产日韩在线观看 | 亚洲成人免费影院 | 国产亚洲精品久久久 | 欧洲精品乱码久久久久蜜桃 | 亚洲欧美日韩精品久久奇米色影视 | 天天干天天操 | 欧美一区二区三区 | 日韩福利在线观看 | 午夜精品久久久久久久久 | 26uuu成人免费毛片 | 岛国视频| 成av人片在线观看www | 99热婷婷 | 久艹伊人| 日韩大尺度在线观看 | 国产欧美一区二区视频 | 奇米av | 99re视频在线 | 少妇黄色一级片 | 国产精品久久久久久久9999 | 欧美一区二区三区在线观看 | 国产亚洲欧美一区二区三区 | 国产精品久久久久久久久 | 国产在线一二 | 欧美日韩一| 国产精品久久久一区 | 国产成人精品久久二区二区 | 日韩免费在线观看视频 | 国产成人av一区二区三区 | 国产精品二区三区 | 99久久精品一区二区成人 | 国产精品久久久久9999鸭 | 欧美二区在线观看 | 亚洲第一天堂无码专区 | 在线观看精品自拍私拍 | 久久久久国产一区二区三区 | 亚洲精品久久久久一区二区三区 | 亚洲性视频网站 | 蜜臀久久99精品久久久无需会员 | 国产在线精品一区二区三区 | 久久成人免费视频 | 精品一区二区久久久久久久网站 | 天天干夜夜弄 | 欧美日韩一区在线 | 欧美日韩在线综合 | 男女午夜网站 | 国产精品色 | 久久精品免费电影 | 精品久久久久久久久久久久久久 | 欧美日韩国产在线观看 | 久久伊人精品网 | 国产成人精品在线 | 久久网日本 | 91精品国产综合久久久久久漫画 | 欧美日韩国产综合视频 | 99视频在线免费观看 | 成人免费高清视频 | 亚洲一区二区三区在线播放 | 午夜久久久久 | 国产激情视频 | 欧美日韩成人在线播放 | www免费网站在线观看 | 99爱在线观看 | 亚洲视频在线一区 | 久久福利 | 日韩精品一区在线视频 | 日韩成人在线影院 | 久久午夜综合久久 | 欧美一区成人 | 一区二区在线免费观看 | av网站在线免费观看 | 麻豆精品一区二区 | 99亚洲精品 | 韩国电影久久影院 | 四虎成人在线播放 | 国产成人欧美一区二区三区的 | 国产高清在线视频 | 999精品嫩草久久久久久99 | 亚洲aaaaaa特级 | 日韩精品一区在线 | 久久精品久久久久久 | 欧美日韩精 | 91精品综合久久久久久五月天 | 日韩欧美一区二区三区 | 日本末发育嫩小xxxx | 青青久久| 羞羞视频在线观看视频 | 亚洲综合二区 | 九色porny丨国产精品 | 玖玖在线免费视频 | 色综合久久网 | 国产一区二区三区久久久久久久久 | 91免费版在线观看 | 亚洲高清视频一区 | 噜噜噜在线视频 | 91丁香| 97久久精品 | 成人欧美亚洲 | 欧美成人激情视频 | 成人在线h | 国产成人免费在线观看 | 国产精品福利久久 | 日韩福利视频 | 国产精品伦理 | 精品久久国产 | 久久久国产一区二区 | 国产精品久久久久久久午夜片 | 国内精品久久久久久中文字幕 | 不卡二区 | 久久精品123| 久久久精品国产 | 欧美精品一区二 | 最新一级毛片 | 成人日韩 | 国产黄色大片 | av大片网 | av网站免费观看 | 中文字字幕在线观看 | 国产精品影院在线观看 | 午夜精品网站 | 成人免费毛片aaaaaa片 | 97伦理电影| 欧洲成人午夜免费大片 | 免费成人激情视频 | 天天干天天爱天天 | 午夜一区二区三区在线观看 | 成人亚洲区| 欧美日视频 | 在线视频一区二区 | 黄色免费网站在线看 | 天天曰天天曰 | 日本视频免费高清一本18 | 欧美日韩精品一区 | 久久国产亚洲 | 亚洲欧美精品一区二区 | 精品96久久久久久中文字幕无 | 日本理伦片午夜理伦片 | 日摸夜操| 一区二区在线免费观看 | h视频免费在线 | 人人澡人人草 | 久久久久久久久久久免费视频 | 国产欧美亚洲精品 | 一级片在线观看 | 日本久久精品一区二区 | 91精品国产综合久久福利软件 | 91影院| 一级黄色大片 | 99精品久久久 | 久操视频在线观看 | 午夜无码国产理论在线 | 久久久久久国产精品 | 久久久久久99| 久久在线 | 日本人做爰大片免费观看一老师 | 国产成人久久精品一区二区三区 | 亚洲另类小视频 | 中文字幕av第一页 | 国产视频福利在线观看 | 狠狠亚洲 | 精品国产成人 | 天堂av中文在线 | 91亚洲精品一区 | av手机电影 | 在线免费毛片 | 国产视频1区 | 欧美日韩精品一区 | 国产区免费在线观看 | 国产小视频在线 | 成人免费在线看片 | 日韩性网站 | 日韩精品 | 91精品国产综合久久久久 | 在线你懂得 | k8久久久一区二区三区 | 99国产精品99久久久久久 | 久久久一区二区 | 国产伦精品一区二区 | 特级淫片女子高清视频在线观看 | 欧美性一区二区三区 | 欧美成年网站 | 一区二区日韩 | 一区二区在线视频 | 国产一区在线看 | 一级片福利 | 国产精品久久久久久久久久99 | 国产图区 | 国产婷婷精品av在线 | 涩涩片影院 | 亚洲综合在线播放 | 国产成人免费在线 | 蜜桃精品视频在线 | 国产亚洲精品美女久久久久久久久久 | 天堂av中文 | 91黄色免费看 | 一区二区不卡 | 亚洲第一区在线 | 99免费视频 | 久久综合伊人77777 | 亚洲精品日韩综合观看成人91 | 国产精品第一国产精品 | 成人av免费在线 | 中文字幕亚洲区 | 狠狠狠干| 成人在线免费av | 免费一级在线观看 | 成人在线观看免费视频 | 欧美精品在线看 | 国产99久久久久久免费看农村 | 曰本人一级毛片免费完整视频 | 欧美日本免费一区二区三区 | 国产亚洲精品精品国产亚洲综合 | 日韩在线精品强乱中文字幕 | 精品日韩一区二区三区 | 欧美激情性国产欧美无遮挡 | 欧美一级二级视频 | 成人亚洲一区 | 欧洲精品| 久久一区| 久久精品一区二区三区四区 | 中文字幕在线视频一区 | 亚洲综合在线视频 | 国产黄色免费视频 | 在线精品一区 | 国产精品资源在线 | 在线精品亚洲欧美日韩国产 | 亚洲男人天堂网 | 狠狠视频 | 91色在线| 天天干人人 | 国产精品久久久久久一级毛片 | 综合 欧美 亚洲日本 | 羞羞视频在线播放 | 欧美国产免费 | 久久99精品久久久久国产越南 | 日日操天天射 | 国产精品久久久久久久久久久久冷 | 国产一区二区三区网站 | 欧美精品一区二 | 免费观看视频毛片 | 国产精品高清在线观看 | 国产精品久久久久久久久 | 欧美日韩一区在线观看 | 天天综合91 | 成人亚洲精品久久久久软件 | 激情一区二区三区 | 色偷偷噜噜噜亚洲男人 | 亚洲第一天堂无码专区 | 国产乱码一区二区三区 | 欧美成人福利 | 日韩福利 | 亚洲高清在线观看 | 亚洲第一福利视频 | 国产超碰人人爽人人做人人爱 | 美女午夜影院 | 日韩欧美二区 | 91网在线观看 | 成人黄色av | 99视频在线看 | 欧洲一级毛片 | 欧美全黄 | 亚洲第一av | 91丨九色丨国产在线 | www.成人.com | 国产精品成人3p一区二区三区 | 17c一起操 | 久久兔费看a级 | 伊人超碰| 91精品国产综合久久久亚洲 | 极情综合网| 久久久久久毛片免费播放 | 国产噜噜噜噜噜久久久久久久久 | 久久av一区 | 午夜影院在线观看 | 国产91久久精品 | 欧美一区二区三区 | 一区二区在线播放视频 | 午夜99 | 毛片在线视频 | 国产在线视频一区 | 91日韩精品一区二区三区 | 99精品视频免费 | 美女91| 欧美日韩在线视频一区二区 | 午夜男人免费视频 | 91福利视频导航 | 日本亚洲一区 | 一区二区中文字幕在线观看 | 情一色一乱一欲一区二区 | 999久久久国产999久久久 | 日韩一区在线视频 | 国产精品a久久久久 | 日日操视频 | 国产99久 | caoporn国产精品免费公开 | 欧美日韩一区二区三区在线观看 | 在线中文一区 | 国产一区免费 | 99热在线精品免费 | 久久99精品国产99久久6男男 | 国产日韩欧美一区 | 99精品视频免费在线观看 | 国产成人精品一区二区三区视频 | 国产精品成人观看视频国产奇米 | 欧美视频免费 | 亚洲午夜精品一区二区三区 | 在线中文av | 国产精品亚洲精品 | 亚洲国产网站 | 午夜欧美一区二区三区在线播放 | 久久久久亚洲美女啪啪 | 免费av毛片 | 99伊人| 日韩欧美国产一区二区三区 | 成人久久精品 | 91偷拍精品一区二区三区 | 久久综合一区二区三区 | baoyu123成人免费看视频 | 色婷婷久久 | 精品国产一区二区三区久久久蜜臀 | 在线成人一区 | 中文字幕av网 | 中文字幕在线三区 | 欧美性网| 成人a在线视频免费观看 | 精品国产鲁一鲁一区二区在线观看 | av在线免费观看网站 | 欧美日韩国产一区二区三区 | 婷婷久久综合 | 成人免费网站www网站高清 | 草久网 | 国产精品久久久久久久久免费丝袜 | 国产一级在线观看 | 国产成人免费视频网站高清观看视频 | 一级全黄性色生活片 | h在线免费 | 欧美一区二区三区电影 | 一区二区三区在线免费观看 | 亚洲国产欧美一区二区三区久久 | 欧美一区二区三区在线观看视频 | 永久免费精品视频 | 国产一级黄色 | 一本一道久久a久久精品逆3p | 国产99精品在线 | 日韩小视频在线播放 | 色婷婷综合久久久久中文一区二区 | 亚洲国产欧美日韩 | 国产精品一区二区三区在线 | 黄色一级片视频播放 | 亚洲夜幕久久日韩精品一区 | 久久99精品久久久久久琪琪 | 99国产视频 | 可以在线看的黄色网址 | 浴室洗澡偷拍一区二区 | 国产91对白叫床清晰播放 | 欧美高清一区 | 日韩中文一区二区三区 | 久久久精品国产 | 欧美日韩免费在线 | 国产精品日日 | 精品国产乱码久久久久久1区2区 | 日本在线一二 | 精品久久av | 欧美一区二区三区精品 | 天堂中文字幕 | 国产精彩视频 | 免费在线观看av | 伊人91 | 久久y| 亚洲a在线播放 | 国产高清毛片 | 不卡在线 | 免费一区二区三区视频在线 | 日韩精品一区二 | 国产一区二区三区免费观看 | 夜夜av| 91精品国产一区二区 | 国产成人一区二区 | 日本另类αv欧美另类aⅴ | 国产精品视频一区二区三区不卡 | 亚洲欧美国产精品久久久久 | 亚洲精品免费视频 | 国产精品美乳一区二区免费 | 亚洲精品视频在线免费播放 | 亚洲成a | 欧美精品一区二区三区在线 | 欧美日韩国产一区二区三区 | 毛片入口 | 99re视频精品 | 欧美中文字幕一区二区 | 一区二区在线电影 | 国产精品美女在线观看 | 日韩一级在线免费观看 | 欧美一级二级视频 | 日韩爱爱网址 | 最新国产中文字幕 | 人人玩人人干 | 亚洲精品一区二区网址 | 国产一区二区三区在线免费 | 在线观看日韩 | 日韩在线观看视频免费 | 天天碰天天操 | 色综合久久久久 | 欧美精品免费在线观看 | 性视频亚洲 | 久久久国产一区二区三区 | 久久久国产一区二区三区 | 狠狠操狠狠操 | 午夜在线电影 | 亚洲欧美日韩国产综合 | 高清视频一区 | 日韩一及片| 国产区区| 欧美成人在线影院 | 精品久久久久久久久久久 | 国产99一区| 成人夜晚看av | av不卡在线播放 | 欧美夜夜骑 | av在线天堂| 久久成人免费视频 | 欧美国产日韩一区 | 在线免费国产 | 欧美日韩精品一区二区三区在线观看 | 在线日韩欧美 | 亚洲成人精品网 | 天天干天天曰天天操 | 骚视频在线观看 | 亚洲视频在线观看免费 | 日韩专区中文字幕 | 亚洲日本欧美日韩高观看 | 91亚洲一区 | 九九热精品视频 | 欧洲另类在线1 | 亚洲成人精品 | 亚洲高清视频在线观看 | 久久精彩视频 | av一区二区在线播放 | 亚洲精品一区二区三区中文字幕 | 成人一区视频 | 性视频黄色 | 免费成人在线观看视频 | 亚洲成av人片在线观看无码 | 欧美a网| 成人黄色a | 中文字幕av网 | 国产区福利| a级性生活片 | 成人午夜看片 | 91免费版在线观看 | 精品久久久久久久人人人人传媒 | 九九色影院| 久久爱综合网 | 亚洲免费视频观看 | 久久成人国产精品 | 国产免费一区二区三区 | 久久成人av | 国产精品毛片一区二区三区 | 精品www| 天天天天爽 | 九九视频这里只有精品 | 伊人网综合视频 | 国产精品人人做人人爽 | 日本美女一区二区三区 | 毛片激情永久免费 | 亚州精品天堂中文字幕 | 一区二区精品视频在线观看 | 亚洲福利在线播放 | 日本一区二区成人 | 国产精品丝袜一区二区 | av7777| 欧美久热 | 欧美激情一区二区三区 | 国产成人综合一区二区三区 | 狠狠色综合色综合网络 | 国产乱码精品一区二区三区爽爽爽 | 日韩免费一区 | 国产精品一区二区三区免费 | 三级成人片 | 国产激情性色视频在线观看 | 四虎影院最新地址 | jizz在线观看| 色吧av| 日韩久久精品电影 | 久久99精品久久久久婷婷暖91 | 久久久久久91香蕉国产 | 精品国产乱码一区二区三区a | 久久久高清 | 亚洲精品乱码久久久久久蜜桃 | 午夜艹| 国产成人精品一区二区三区视频 | 精品美女在线 | 看免费毛片 | 九色一区 | 成人一区二区三区久久精品嫩草 | 亚洲精品成人av | 久久久久国产精品视频 | 欧美日韩亚洲二区 | 国产精品视频一区二区三区不卡 | 国产精品日本欧美一区二区三区 | 亚洲成人高清 | 国产成人精品久久二区二区91 | 欧美精品国产精品 | 日本黄色片免费 | 91在线视频免费播放 | 久久精品久久久 | 亚洲一区二区精品视频 | 国产真实精品久久二三区 | 中文字幕高清在线 | 在线观看国产www | 亚洲欧洲精品视频在线观看 | 国产精品揄拍一区二区久久国内亚洲精 | 91精品亚洲 | 一级黄色影片在线观看 | 亚洲国产精品成人综合色在线婷婷 | 国产在线小视频 | 成人免费视频观看视频 | 在线视频 亚洲 | 影音先锋中文字幕一区 | 国产精品成人免费视频 | 国产色在线 | 亚洲午夜精品一区二区三区 | 成人免费网站 | 国产精品久久久久aaaa | 久草热8精品视频在线观看 亚洲区在线 | 在线免费黄色小视频 | 久久久久久毛片免费观看 | www.99| 国产成人午夜精品影院游乐网 | 91成人小视频 | 韩国三级中文字幕hd久久精品 | 亚洲乱码一区二区三区在线观看 | 欧美在线观看一区 | 日韩黄色片免费看 | 成人免费在线视频 | 国产在线观看二区 | 久草精品在线观看 | 日韩一区精品视频 | 国产一区二区三区91 | 91视频在线观看 | 亚洲精品视频在线播放 | 黑人巨大精品欧美一区二区三区 | 欧美国产一区二区 | 中文字幕成人网 | h色视频在线观看 | 日本不卡高字幕在线2019 | 日韩成人一区二区 | 国产精品夜夜春夜夜爽久久电影 | 一区二区不卡 | 欧美成人高清 | 日韩国产精品一区二区三区 | 美女张开腿视频网站免费 | 色婷婷久久| 白浆在线| 在线看一区 | 在线中文字幕视频 | 国产精品毛片久久久久久 | 国产一区二区视频在线观看 | 无码日韩精品一区二区免费 | 色人人 | 日韩在线观看 | 亚洲福利 | 三级欧美在线观看 | 国产日韩欧美在线观看 | 最近韩国日本免费观看mv免费版 | 国产色网 | 黄色二区 | 中文字幕在线第一页 | 日韩精品专区 | 午夜黄色影院 | 成人精品一区二区三区中文字幕 | 亚洲成av人片一区二区梦乃 | 成人中文视频 | 国产午夜精品久久久久久久 | 亚洲一区av在线 | 久久久av| 午夜私人影院 | 亚洲精品日本 | 国产成人精品一区二区三区网站观看 | 黄色国产区| 久久久www成人免费精品 | 97超碰免费 | 久久久.com| h免费在线 | 在线观看亚洲精品视频 | 免费黄色小视频 | 日韩综合网 | 成人精品视频99在线观看免费 | av男人电影天堂 | 亚洲一区在线日韩在线深爱 | 影音先锋中文字幕在线 | 99热在线精品免费 | 呦一呦二在线精品视频 | 日韩一区二区三区精品 | 亚洲国产成人在线 | 久久一二三四 | 亚洲一区二区在线视频 | 日韩综合在线 |