精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

「Spring」認證安全架構(gòu)指南

開發(fā) 前端
本指南并非旨在作為解決最基本問題的手冊或秘訣(這些問題還有其他來源),但它對初學(xué)者和專家都可能有用。Spring Boot 也經(jīng)常被引用,因為它為安全應(yīng)用程序提供了一些默認行為,并且了解它如何與整體架構(gòu)相適應(yīng)會很有用。

本指南是 Spring Security 的入門指南,提供對框架設(shè)計和基本構(gòu)建塊的深入了解。我們僅涵蓋應(yīng)用程序安全的基礎(chǔ)知識。但是,這樣做,我們可以清除使用 Spring Security 的開發(fā)人員遇到的一些困惑。為此,我們通過使用過濾器,更一般地,通過使用方法注解,來看看在 Web 應(yīng)用程序中應(yīng)用安全性的方式。當您需要深入了解安全應(yīng)用程序的工作原理、如何對其進行自定義或需要學(xué)習(xí)如何考慮應(yīng)用程序安全性時,請使用本指南。

本指南并非旨在作為解決最基本問題的手冊或秘訣(這些問題還有其他來源),但它對初學(xué)者和專家都可能有用。Spring Boot 也經(jīng)常被引用,因為它為安全應(yīng)用程序提供了一些默認行為,并且了解它如何與整體架構(gòu)相適應(yīng)會很有用。

所有原則同樣適用于不使用 Spring Boot 的應(yīng)用程序。

身份驗證和訪問控制

應(yīng)用程序安全性歸結(jié)為兩個或多或少獨立的問題:身份驗證(你是誰?)和授權(quán)(你可以做什么?)。有時人們會說“訪問控制”而不是“授權(quán)”,這可能會讓人感到困惑,但這樣想可能會有所幫助,因為“授權(quán)”在其他地方被重載了。Spring Security 的架構(gòu)旨在將身份驗證與授權(quán)分開,并為兩者提供策略和擴展點。

驗證

認證的主要策略接口是AuthenticationManager,它只有一個方法:

public interface AuthenticationManager {

Authentication authenticate(Authentication authentication)
throws AuthenticationException;
}

An可以在其方法AuthenticationManager中做三件事之一:authenticate()

  • 如果它可以驗證輸入代表一個有效的主體,則返回一個Authentication(通常帶有)。authenticated=true
  • AuthenticationException如果它認為輸入代表無效的委托人,則拋出一個。
  • null如果它不能決定返回。

AuthenticationException是運行時異常。它通常由應(yīng)用程序以通用方式處理,具體取決于應(yīng)用程序的樣式或用途。換句話說,通常不期望用戶代碼來捕獲和處理它。例如,Web UI 可能會呈現(xiàn)一個說明身份驗證失敗的頁面,并且后端 HTTP 服務(wù)可能會發(fā)送一個 401 響應(yīng),WWW-Authenticate根據(jù)上下文是否有標頭。

最常用的實現(xiàn)AuthenticationManager是ProviderManager,它委托給一個AuthenticationProvider實例鏈。AnAuthenticationProvider有點像 an AuthenticationManager,但它有一個額外的方法允許調(diào)用者查詢它是否支持給定的Authentication類型:

public interface AuthenticationProvider {

Authentication authenticate(Authentication authentication)
throws AuthenticationException;

boolean supports(Class<?> authentication);
}

方法中的Class<?>參數(shù)supports()是真的Class<? extends Authentication>(只詢問它是否支持傳遞給authenticate()方法的東西)。AProviderManager可以通過委托給AuthenticationProviders. 如果 aProviderManager不能識別特定的Authentication實例類型,則會跳過它。

AProviderManager有一個可選的父級,如果所有提供者都返回,它可以咨詢它null。如果父級不可用,則null Authentication結(jié)果為AuthenticationException.

有時,應(yīng)用程序具有受保護資源的邏輯組(例如,與路徑模式匹配的所有 Web 資源,例如/api/**),并且每個組都可以有自己的專用AuthenticationManager. 通常,它們中的每一個都是一個ProviderManager,并且它們共享一個父級。然后,父級是一種“全局”資源,充當所有提供者的后備。

「Spring」認證安全架構(gòu)指南

圖 1. 使用的AuthenticationManager層次結(jié)構(gòu)ProviderManager

自定義身份驗證管理器

Spring Security 提供了一些配置助手來快速獲取應(yīng)用程序中設(shè)置的常見身份驗證管理器功能。最常用的幫助程序是AuthenticationManagerBuilder,它非常適合設(shè)置內(nèi)存、JDBC 或 LDAP 用戶詳細信息或添加自定義UserDetailsService. 以下示例顯示了一個配置全局(父)的應(yīng)用程序AuthenticationManager:

@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {

... // web stuff here

@Autowired
public void initialize(AuthenticationManagerBuilder builder, DataSource dataSource) {
builder.jdbcAuthentication().dataSource(dataSource).withUser("dave")
.password("secret").roles("USER");
}

}

此示例與 Web 應(yīng)用程序相關(guān),但 的使用AuthenticationManagerBuilder更廣泛(有關(guān)如何實現(xiàn) Web 應(yīng)用程序安全性的更多詳細信息,請參閱Web 安全性)。請注意,它AuthenticationManagerBuilder是@Autowired在 a 中的一個方法中@Bean?——這就是它構(gòu)建全局(父)的原因AuthenticationManager。相反,請考慮以下示例:

@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {

@Autowired
DataSource dataSource;

... // web stuff here

@Override
public void configure(AuthenticationManagerBuilder builder) {
builder.jdbcAuthentication().dataSource(dataSource).withUser("dave")
.password("secret").roles("USER");
}

}

如果我們@Override在配置器中使用了 of 方法,那么AuthenticationManagerBuilder將僅用于構(gòu)建“本地” AuthenticationManager,這將是全局方法的子對象。在 Spring Boot 應(yīng)用程序中,您可以@Autowired將全局 bean 放入另一個 bean,但您不能對本地 bean 執(zhí)行此操作,除非您自己顯式公開它。

Spring Boot 提供了一個默認的全局AuthenticationManager(只有一個用戶),除非您通過提供自己的 bean 類型來搶占它AuthenticationManager。默認值本身就足夠安全,您不必擔心太多,除非您主動需要自定義全局AuthenticationManager. 如果您進行任何構(gòu)建AuthenticationManager.

授權(quán)或訪問控制

一旦認證成功,我們就可以繼續(xù)進行授權(quán),這里的核心策略是AccessDecisionManager. 框架提供了三個實現(xiàn),所有三個都委托給一個AccessDecisionVoter實例鏈,有點像ProviderManager委托給AuthenticationProviders.

AnAccessDecisionVoter考慮一個Authentication(代表一個主體)和一個安全的Object,它被裝飾了ConfigAttributes:

boolean supports(ConfigAttribute attribute);

boolean supports(Class<?> clazz);

int vote(Authentication authentication, S object,
Collection<ConfigAttribute> attributes);

在和的Object簽名中是完全通用的。它代表用戶可能想要訪問的任何內(nèi)容(Web 資源或 Java 類中的方法是最常見的兩種情況)。它們也是相當通用的,代表安全的裝飾,帶有一些決定訪問它所需的權(quán)限級別的元數(shù)據(jù)。是一個接口。它只有一個方法(非常通用并返回 a ),因此這些字符串以某種方式編碼了資源所有者的意圖,表達了關(guān)于允許誰訪問它的規(guī)則。典型的是用戶角色的名稱(如or ),它們通常具有特殊格式(如AccessDecisionManagerAccessDecisionVoterConfigAttributesObjectConfigAttributeStringConfigAttributeROLE_ADMINROLE_AUDITROLE_前綴)或表示需要評估的表達式。

大多數(shù)人使用默認值A(chǔ)ccessDecisionManager,即AffirmativeBased(如果任何選民肯定返回,則授予訪問權(quán)限)。通過添加新的或修改現(xiàn)有的工作方式,任何定制都傾向于發(fā)生在選民身上。

使用 Spring 表達式語言 (SpEL) 表達式非常常見ConfigAttributes——例如,isFullyAuthenticated() && hasRole('user'). 這由AccessDecisionVoter可以處理表達式并為它們創(chuàng)建上下文的 an 支持。要擴展可以處理的表達式范圍,SecurityExpressionRoot有時還需要自定義實現(xiàn)SecurityExpressionHandler.

網(wǎng)絡(luò)安全

Web 層中的 Spring Security(用于 UI 和 HTTP 后端)是基于 Servlet 的Filters,所以首先看一下Filters一般的作用是有幫助的。下圖顯示了單個 HTTP 請求的處理程序的典型分層。

「Spring」認證安全架構(gòu)指南

客戶端向應(yīng)用程序發(fā)送請求,容器根據(jù)請求 URI 的路徑?jīng)Q定應(yīng)用哪些過濾器和哪個 servlet。最多一個 servlet 可以處理一個請求,但是過濾器形成一個鏈,所以它們是有序的。事實上,如果過濾器想要自己處理請求,它可以否決鏈的其余部分。過濾器還可以修改下游過濾器和 servlet 中使用的請求或響應(yīng)。過濾器鏈的順序非常重要,Spring Boot 通過兩種機制來管理它:@Beans類型Filter可以有一個@Order或?qū)崿F(xiàn)Ordered,它們可以是一個FilterRegistrationBean它本身有一個訂單作為其 API 的一部分。一些現(xiàn)成的過濾器定義了自己的常量來幫助表明他們喜歡的相對于彼此的順序(例如,SessionRepositoryFilter來自 Spring Session 有一個DEFAULT_ORDERof Integer.MIN_VALUE + 50,它告訴我們它喜歡在鏈中處于早期,但是它不排除在它之前出現(xiàn)其他過濾器)。

Spring Security 在鏈中作為單個安裝Filter,其具體類型是FilterChainProxy,原因我們很快就會介紹。在 Spring Boot 應(yīng)用程序中,安全過濾器位于@Bean中ApplicationContext,默認情況下會安裝它,以便將其應(yīng)用于每個請求。它安裝在由 定義的位置SecurityProperties.DEFAULT_FILTER_ORDER,該位置又被錨定FilterRegistrationBean.REQUEST_WRAPPER_FILTER_MAX_ORDER(Spring Boot 應(yīng)用程序在包裝請求時期望過濾器具有的最大順序,修改其行為)。不僅如此:從容器的角度來看,Spring Security 是一個單一的過濾器,但在其中,還有額外的過濾器,每個過濾器都扮演著特殊的角色。下圖顯示了這種關(guān)系:

「Spring」認證安全架構(gòu)指南

圖 2. Spring Security 是單一物理的Filter,但將處理委托給內(nèi)部過濾器鏈

實際上,安全過濾器中甚至還有一層間接性:它通常以 . 的形式安裝在容器中DelegatingFilterProxy,而不必一定是 Spring @Bean。代理委托給 a FilterChainProxy,它始終是 a @Bean,通常具有固定名稱springSecurityFilterChain。它FilterChainProxy包含在內(nèi)部排列為過濾器鏈(或鏈)的所有安全邏輯。所有過濾器都具有相同的 API(它們都實現(xiàn)了FilterServlet 規(guī)范中的接口),并且它們都有機會否決鏈的其余部分。

可以有多個過濾器鏈都由 Spring Security 在同一頂層管理,F(xiàn)ilterChainProxy并且對容器都是未知的。Spring Security 過濾器包含一個過濾器鏈列表,并將請求分派到與其匹配的第一個鏈。下圖顯示了基于匹配請求路徑(/foo/**匹配之前/**)發(fā)生的調(diào)度。這很常見,但不是匹配請求的唯一方法。這個分派過程最重要的特點是只有一個鏈處理一個請求。

「Spring」認證安全架構(gòu)指南

圖 3. Spring SecurityFilterChainProxy將請求分派到匹配的第一個鏈。

沒有自定義安全配置的普通 Spring Boot 應(yīng)用程序有幾個(稱為 n)過濾器鏈,其中通常 n=6。第一個 (n-1) 個鏈只是為了忽略靜態(tài)資源模式,例如/css/**and/images/**和錯誤視圖:/error. (路徑可以由用戶使用security.ignored配置SecurityPropertiesbean 控制。)最后一個鏈匹配包羅萬象的路徑 ( /**) 并且更加活躍,包含身份驗證、授權(quán)、異常處理、會話處理、標頭寫入等邏輯上。默認情況下,該鏈中共有 11 個過濾器,但通常用戶無需關(guān)心使用哪些過濾器以及何時使用。

容器不知道 Spring Security 內(nèi)部的所有過濾器這一事實很重要,尤其是在 Spring Boot 應(yīng)用程序中,默認情況下,所有@Beans類型Filter都自動注冊到容器中。因此,如果您想將自定義過濾器添加到安全鏈中,則需要不將其設(shè)為 a@Bean或?qū)⑵浒b在FilterRegistrationBean明確禁用容器注冊的 a 中。

創(chuàng)建和自定義過濾器鏈

Spring Boot 應(yīng)用程序(具有請求匹配器的應(yīng)用程序)中的默認后備過濾器鏈/**具有預(yù)定義的SecurityProperties.BASIC_AUTH_ORDER. 您可以通過設(shè)置將其完全關(guān)閉security.basic.enabled=false,也可以將其用作后備并以較低的順序定義其他規(guī)則。要執(zhí)行后者,請?zhí)砑右粋€(或)@Bean類型并用 裝飾類,如下所示:WebSecurityConfigurerAdapterWebSecurityConfigurer@Order

@Configuration
@Order(SecurityProperties.BASIC_AUTH_ORDER - 10)
public class ApplicationConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/match1/**")
...;
}
}

這個 bean 導(dǎo)致 Spring Security 添加一個新的過濾器鏈并在回退之前對其進行排序。

與另一組相比,許多應(yīng)用程序?qū)σ唤M資源的訪問規(guī)則完全不同。例如,托管 UI 和支持 API 的應(yīng)用程序可能支持基于 cookie 的身份驗證,通過重定向到 UI 部分的登錄頁面和基于令牌的身份驗證,以及對 API 部分的未經(jīng)身份驗證請求的 401 響應(yīng)。每組資源都有自己WebSecurityConfigurerAdapter的唯一順序和自己的請求匹配器。如果匹配規(guī)則重疊,則最早排序的過濾器鏈獲勝。

請求匹配調(diào)度和授權(quán)

安全過濾器鏈(或等效的 aWebSecurityConfigurerAdapter)有一個請求匹配器,用于決定是否將其應(yīng)用于 HTTP 請求。一旦決定應(yīng)用特定的過濾器鏈,就不會應(yīng)用其他過濾器鏈。但是,在過濾器鏈中,您可以通過在配置器中設(shè)置額外的匹配器來對授權(quán)進行更細粒度的控制HttpSecurity,如下所示:

@Configuration
@Order(SecurityProperties.BASIC_AUTH_ORDER - 10)
public class ApplicationConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/match1/**")
.authorizeRequests()
.antMatchers("/match1/user").hasRole("USER")
.antMatchers("/match1/spam").hasRole("SPAM")
.anyRequest().isAuthenticated();
}
}

配置 Spring Security 時最容易犯的錯誤之一就是忘記這些匹配器適用于不同的進程。一種是整個過濾器鏈的請求匹配器,另一種只是選擇要應(yīng)用的訪問規(guī)則。

將應(yīng)用程序安全規(guī)則與執(zhí)行器規(guī)則相結(jié)合

如果您將 Spring Boot Actuator 用于管理端點,您可能希望它們是安全的,并且默認情況下它們是安全的。事實上,只要將執(zhí)行器添加到安全應(yīng)用程序,您就會獲得一個僅適用于執(zhí)行器端點的附加過濾器鏈。它是使用僅匹配執(zhí)行器端點的請求匹配器定義的,它的順序為ManagementServerProperties.BASIC_AUTH_ORDER,比默認的SecurityProperties回退過濾器少 5 個,因此在回退之前對其進行查詢。

如果您希望您的應(yīng)用程序安全規(guī)則應(yīng)用于執(zhí)行器端點,您可以添加一個比執(zhí)行器更早排序的過濾器鏈,并且該過濾器鏈具有包含所有執(zhí)行器端點的請求匹配器。如果您更喜歡執(zhí)行器端點的默認安全設(shè)置,最簡單的方法是在執(zhí)行器之后添加您自己的過濾器,但在回退之前添加(例如,ManagementServerProperties.BASIC_AUTH_ORDER + 1),如下所示:

@Configuration
@Order(ManagementServerProperties.BASIC_AUTH_ORDER + 1)
public class ApplicationConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/foo/**")
...;
}
}

Web 層中的 Spring Security 當前與 Servlet API 相關(guān)聯(lián),因此它僅在 servlet 容器中運行應(yīng)用程序時才真正適用,無論是嵌入的還是其他的。但是,它不依賴于 Spring MVC 或 Spring Web 堆棧的其余部分,因此它可以在任何 servlet 應(yīng)用程序中使用——例如,使用 JAX-RS 的應(yīng)用程序。

方法安全

除了支持保護 Web 應(yīng)用程序之外,Spring Security 還支持將訪問規(guī)則應(yīng)用于 Java 方法執(zhí)行。對于 Spring Security,這只是一種不同類型的“受保護資源”。對于用戶,這意味著使用相同格式的ConfigAttribute字符串(例如,角色或表達式)聲明訪問規(guī)則,但在代碼中的不同位置。第一步是啟用方法安全性——例如,在我們應(yīng)用程序的頂層配置中:

@SpringBootApplication
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SampleSecureApplication {
}

然后我們可以直接裝飾方法資源:

@Service
public class MyService {

@Secured("ROLE_USER")
public String secure() {
return "Hello Security";
}

}

此示例是具有安全方法的服務(wù)。如果 Spring 創(chuàng)建了@Bean這種類型的 a,它會被代理,調(diào)用者必須在方法實際執(zhí)行之前通過安全攔截器。如果訪問被拒絕,調(diào)用者會得到一個AccessDeniedException而不是實際的方法結(jié)果。

您可以在方法上使用其他注釋來強制實施安全約束,特別是@PreAuthorize和@PostAuthorize,它們允許您編寫分別包含對方法參數(shù)和返回值的引用的表達式。

將 Web 安全性和方法安全性結(jié)合起來并不少見。過濾器鏈提供用戶體驗功能,例如身份驗證和重定向到登錄頁面等,方法安全性提供更細粒度的保護。

使用線程

Spring Security 基本上是線程綁定的,因為它需要使當前經(jīng)過身份驗證的主體可用于各種下游消費者。基本構(gòu)建塊是SecurityContext,它可能包含一個Authentication(當用戶登錄時,它是一個Authentication顯式的authenticated)。您始終可以SecurityContext通過靜態(tài)便捷方法訪問和SecurityContextHolder操作ThreadLocal. 以下示例顯示了這種安排:

SecurityContext context = SecurityContextHolder.getContext();
Authentication authentication = context.getAuthentication();
assert(authentication.isAuthenticated);

用戶應(yīng)用程序代碼執(zhí)行此操作并不常見,但如果您需要編寫自定義身份驗證過濾器(盡管即使這樣,Spring Security 中也有一些基類可供您使用,以便您可以避免需要使用SecurityContextHolder)。

如果您需要訪問 Web 端點中當前經(jīng)過身份驗證的用戶,可以在 a 中使用方法參數(shù)@RequestMapping,如下所示:

@RequestMapping("/foo")
public String foo(@AuthenticationPrincipal User user) {
... // do stuff with user
}

此注解將電流Authentication拉出SecurityContext并調(diào)用其上的getPrincipal()方法以產(chǎn)生方法參數(shù)。Principalin an的類型Authentication取決于AuthenticationManager用于驗證身份驗證的類型,因此這可能是一個有用的小技巧,可以獲取對用戶數(shù)據(jù)的類型安全引用。

如果使用 Spring Security,則PrincipalfromHttpServletRequest是 type Authentication,所以你也可以直接使用它:

@RequestMapping("/foo")
public String foo(Principal principal) {
Authentication authentication = (Authentication) principal;
User = (User) authentication.getPrincipal();
... // do stuff with user
}

如果您需要編寫在不使用 Spring Security 時工作的代碼,這有時會很有用(您需要在加載Authentication類時更加防御)。

異步處理安全方法

由于SecurityContext是線程綁定的,如果您想要執(zhí)行任何調(diào)用安全方法的后臺處理(例如, with @Async),您需要確保傳播上下文。這歸結(jié)為使用在后臺執(zhí)行SecurityContext的任務(wù)(Runnable、等)包裝 。CallableSpring Security 提供了一些幫助程序來簡化此操作,例如 和 的包裝Runnable器Callable。要傳播SecurityContextto@Async方法,您需要提供AsyncConfigurer并確保其Executor類型正確:

@Configuration
public class ApplicationConfiguration extends AsyncConfigurerSupport {

@Override
public Executor getAsyncExecutor() {
return new DelegatingSecurityContextExecutorService(Executors.newFixedThreadPool(5));
}

}
責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2022-03-04 23:55:33

安全架構(gòu)結(jié)構(gòu)

2009-07-20 15:57:42

ASP.NET安全架構(gòu)

2020-04-15 09:41:50

多云云安全安全云遷移

2022-07-29 09:00:00

SaaS安全認證

2023-06-28 07:16:11

2022-03-24 12:03:40

網(wǎng)絡(luò)安全零信任

2015-01-04 16:59:37

CISSP安全架構(gòu)系統(tǒng)保護

2013-04-24 14:53:56

2015-11-26 17:17:36

2022-06-28 15:04:32

容器Docker

2022-06-28 15:06:35

容器Spring

2022-01-05 22:43:55

云安全架構(gòu)數(shù)據(jù)

2010-03-24 11:38:10

2022-02-03 10:30:38

物聯(lián)網(wǎng)安全架構(gòu)

2013-08-14 09:18:42

2012-08-17 10:55:21

IBMdW

2024-06-28 10:34:00

2022-08-22 11:45:59

架構(gòu)技術(shù)

2021-05-31 18:25:02

云安全架構(gòu)云安全安全架構(gòu)

2022-06-01 11:14:22

云原生安全架構(gòu)設(shè)計
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲精品一区二区三区99| 久久久久一区二区三区四区| 欧美超级免费视 在线| 人妻精油按摩bd高清中文字幕| 欧美xxxx免费虐| 26uuu国产日韩综合| 国产精品看片资源| 久久久无码一区二区三区| 丝袜美腿一区二区三区动态图| 欧美亚一区二区| 日韩a级黄色片| 国产对白叫床清晰在线播放| 国产成人精品www牛牛影视| 国产97色在线| 精品无码黑人又粗又大又长| 欧美日韩中文字幕一区二区三区| 精品日产卡一卡二卡麻豆| 久草精品在线播放| 中文在线手机av| 国产日韩欧美综合在线| 97av影视网在线观看| 国产黄网在线观看| 欧美精品国产一区| 中文字幕日韩精品在线观看| 成人在线电影网站| 国产视频一区二| 欧美自拍丝袜亚洲| 日本三级免费网站| 欧美aaaaaaa| 中文字幕一区二区三区在线观看| 精品久久久久亚洲| www久久久com| 久久99精品久久久久婷婷| 欧美在线观看一区二区三区| 久久免费在线观看视频| 99国产精品免费视频观看| 亚洲品质视频自拍网| 久久福利小视频| 91精品短视频| 欧美一区二区视频在线观看2020 | 国产午夜在线一区二区三区| 日韩美香港a一级毛片| 色诱视频网站一区| 日本不卡在线观看视频| av日韩中文| 亚洲成人免费在线观看| 国产欧美123| 日韩少妇视频| 亚洲一区影音先锋| 久久av综合网| 成人国产电影在线观看| 亚洲一区二区不卡免费| 男女私大尺度视频| 国产在线美女| 日韩欧美国产激情| 黄色一级一级片| 精品欧美日韩精品| 欧美性猛交xxxx黑人交| 亚洲综合欧美激情| 日日夜夜一区| 欧美一级片在线| a级大片免费看| 嫩呦国产一区二区三区av| 日韩一级免费观看| 东京热av一区| 四虎5151久久欧美毛片| 亚洲欧美国产日韩天堂区| 国产真实乱人偷精品人妻| 精品日韩欧美一区| 久久精品久久久久电影| 欧美成人精品欧美一级私黄| 亚洲高清久久| 国产91精品网站| 在线免费观看一级片| 国产美女一区二区| 精品国产电影| 尤物网在线观看| 亚洲免费观看高清完整版在线观看熊| 免费cad大片在线观看| yellow在线观看网址| 色先锋久久av资源部| 欧美婷婷精品激情| 日韩一区二区三区色| 亚洲国产天堂久久综合网| 91网站免费视频| 91精品精品| 97视频在线看| 国产尤物视频在线观看| 成人精品国产福利| 日本一区二区在线视频观看| 黄色av免费在线| 精品久久中文字幕| 婷婷激情四射五月天| 亚洲三级av| 亚洲色图狂野欧美| 欧美精品99久久久| 丝袜美腿亚洲色图| 91在线观看免费网站| 午夜福利理论片在线观看| 国产精品午夜在线观看| 无码av天堂一区二区三区| av在线日韩| 欧美精品一区二区三区一线天视频| 黄瓜视频污在线观看| 一区二区免费不卡在线| 人体精品一二三区| 成人黄色免费视频| 国产日产欧美一区二区视频| 六月婷婷激情综合| 欧美日韩尤物久久| 日韩国产精品一区| 欧美日韩一级在线观看| 美洲天堂一区二卡三卡四卡视频| 国产精品一区二区欧美黑人喷潮水| 电影av一区| 精品久久久国产| 日日夜夜精品视频免费观看| 欧美久久综合网| 69国产精品成人在线播放| 国产精品无码免费播放| 国产蜜臀av在线一区二区三区| 被灌满精子的波多野结衣| 91精品网站在线观看| 国产亚洲欧美一区| 一级片中文字幕| 国产.欧美.日韩| 久久最新免费视频| 高清在线一区| 亚洲最新在线视频| 男人日女人网站| 99精品国产99久久久久久白柏| 99视频精品全部免费看| 色综合一区二区日本韩国亚洲| 亚洲日本欧美日韩高观看| 日本在线视频免费观看| 粉嫩一区二区三区性色av| 国产高清免费在线| 欧美成人高清视频在线观看| 一本色道久久88综合日韩精品| 91视频免费网址| 99国产精品久久| 欧美成人三级在线视频| 精品av导航| 国内精品视频在线| 亚洲奶汁xxxx哺乳期| 一区二区三区在线免费| 看看黄色一级片| 国产精品久久久久久麻豆一区软件| 国产精品永久免费在线| 中文字幕在线视频区| 欧美天堂一区二区三区| 国产精品一区二区亚洲| 国精产品一区一区三区mba视频| 一区二区三区av在线| 日韩欧国产精品一区综合无码| 日韩视频免费在线观看| 一级淫片免费看| 亚洲精品成人少妇| 亚洲av人人澡人人爽人人夜夜| 极品尤物久久久av免费看| 国产在线精品日韩| 澳门成人av网| 中文字幕不卡av| 国产麻豆精品一区| 亚洲最新视频在线观看| 国产草草浮力影院| 视频一区国产视频| 夜夜爽99久久国产综合精品女不卡 | 色综合久久88色综合天天6| 右手影院亚洲欧美| 奇米精品一区二区三区在线观看一| 亚洲在线不卡| 国产精品xxx在线观看| 欧美一级电影免费在线观看| 岛国在线视频| 这里只有精品免费| 国产精品7777| 久久久久久麻豆| www.色就是色.com| av不卡在线看| 一本一道久久久a久久久精品91| 精品国产不卡一区二区| 97在线视频免费播放| av电影在线网| 欧美精品一区二区三区蜜桃视频| 日本黄色一级视频| 亚洲美女视频在线| theav精尽人亡av| 精品一区二区成人精品| 欧美综合在线播放| 手机在线电影一区| 精品国产免费久久久久久尖叫| 国产精品99| 久久久久久久久久久免费| 国产在线小视频| 日韩免费高清av| www.久久视频| 亚洲高清免费视频| 影音先锋男人看片资源| 94色蜜桃网一区二区三区| 99re精彩视频| 美女国产一区| 日韩久久久久久久久久久久| 久久理论电影| 久久久久网址| 视频二区欧美毛片免费观看| 国产精品1234| 悠悠资源网亚洲青| 欧美激情国产精品| 免费a级毛片在线播放| 精品一区精品二区| 亚洲国产精品suv| 欧美日韩激情一区二区三区| 99热只有这里有精品| 亚洲精品久久久蜜桃| 婷婷综合在线视频| 久久午夜羞羞影院免费观看| 中文字幕 欧美 日韩| 美女视频黄频大全不卡视频在线播放| 精品国产免费av| 极品少妇一区二区三区| 最新av网址在线观看| 四季av在线一区二区三区| 鲁丝一区鲁丝二区鲁丝三区| 精品亚洲精品| 国产精品国模大尺度私拍| 不卡一区视频| 国产日本欧美一区二区三区在线| 日韩精品专区| 欧美最猛性xxxx| 三级中文字幕在线观看| 久久免费精品日本久久中文字幕| 黄色在线免费网站| 久久精品99久久久久久久久| av在线首页| 在线成人中文字幕| 不卡在线视频| 一区二区欧美久久| 国产精品ⅴa有声小说| 亚洲人免费视频| 久久米奇亚洲| 亚洲小视频在线观看| 狠狠色伊人亚洲综合网站l| 亚洲人成网站777色婷婷| 亚洲欧美日韩动漫| 亚洲色图色老头| bbbbbbbbbbb在线视频| 中日韩午夜理伦电影免费 | 国产模特av私拍大尺度| 欧美精品一二三四| 国产又大又黑又粗| 欧美一二三在线| 国产视频第二页| 欧美变态凌虐bdsm| 少妇精品高潮欲妇又嫩中文字幕| 亚洲福利精品在线| 日韩电影免费| 中文字幕日韩高清| 2020国产在线视频| 高清欧美性猛交| 性感女国产在线| 国产精品91久久久| www.久久99| 国产在线播放一区二区| 国产在视频线精品视频www666| 亚洲a∨一区二区三区| 久久一区二区中文字幕| 精品国产一区二区三区在线| 亚洲国产高清视频| aaa毛片在线观看| 久99久精品视频免费观看| 制服下的诱惑暮生| 久久综合色婷婷| 呻吟揉丰满对白91乃国产区| 亚洲女厕所小便bbb| 日本在线视频免费| 欧美亚洲一区三区| 午夜精品久久久久久久96蜜桃| 亚洲精品国产福利| 电影在线高清| 欧美极品少妇与黑人| 国产日韩电影| 亚洲一区二区三区成人在线视频精品 | 久久高清无码视频| 在线免费不卡电影| 午夜精品一二三区| 亚洲欧美一区二区激情| h片在线播放| 国产精品福利在线观看| 狂野欧美xxxx韩国少妇| 精品视频一区在线| 在线观看日韩| 人妻无码视频一区二区三区| 国产黄色精品视频| 妺妺窝人体色WWW精品| 亚洲一区日韩精品中文字幕| 成人黄色激情视频| 亚洲成成品网站| 91高清在线视频| 91精品成人久久| 精品国产不卡一区二区| 日本不卡一区二区三区视频| 国产综合色产| 色婷婷一区二区三区av免费看| www.日韩精品| 劲爆欧美第一页| 欧美日韩第一区日日骚| 欧美在线一卡| 国模吧一区二区| 日韩亚洲精品在线观看| 伊人av成人| 免费观看30秒视频久久| 亚洲黄色在线网站| 午夜成人免费视频| 精品久久久中文字幕人妻| 综合网中文字幕| 成人天堂yy6080亚洲高清| 国产一区二区三区四区五区加勒比| 亚洲国产精品91| 永久免费的av网站| 久久精品一区八戒影视| 日韩精品在线观看免费| 精品福利一区二区三区| 亚洲婷婷噜噜| 91亚洲国产成人精品性色| 日韩毛片视频| 免费涩涩18网站入口| 久久精品男人的天堂| www毛片com| 亚洲美女中文字幕| 厕沟全景美女厕沟精品| 精品国产电影| 校园激情久久| 中文字幕在线观看网址| 欧美午夜影院在线视频| 亚洲人成色777777精品音频| 午夜精品在线视频| 国产亚洲成av人片在线观黄桃| 日本免费成人网| 国产成人aaa| 免费在线一级片| 精品国产百合女同互慰| 91九色在线播放| 精品国产综合区久久久久久| 国产精品久久久久久久免费软件| 国产麻豆xxxvideo实拍| 精品久久香蕉国产线看观看亚洲| 日本亚洲欧美| 国产精品久久久久久av| 日韩成人综合| 亚洲高清视频免费| 洋洋成人永久网站入口| 少妇精品高潮欲妇又嫩中文字幕| 91高清视频在线免费观看| 亚洲精品动态| 热久久精品免费视频| 国产精品麻豆一区二区| 国产www免费观看| 久久久久久国产精品三级玉女聊斋| 国产精品115| 国产成人无码一二三区视频| 国产日韩三级在线| 91精品国产综合久| 欧美国产精品日韩| 农村少妇一区二区三区四区五区| 国产免费一区二区三区视频| 国产蜜臀97一区二区三区| 国产又粗又大又黄| 久久久久成人精品| 九一亚洲精品| 91福利免费观看| 性做久久久久久久久| 精品久久av| 91在线观看免费| 国产精品久久国产愉拍| 九九热免费在线| 精品国产一区二区三区av性色 | 欧美日本亚洲韩国国产| 一本加勒比波多野结衣| 欧美系列亚洲系列| 色www永久免费视频首页在线 | 插我舔内射18免费视频| 色哟哟一区二区三区| 菠萝蜜视频国产在线播放| 久久国产一区| 激情五月婷婷综合网| 日本一级淫片色费放| 中文字幕欧美日韩在线| 国产精品网在线观看| 天堂一区在线观看| 亚洲国产中文字幕在线视频综合| 九色在线播放| 99蜜桃在线观看免费视频网站| 久久综合五月| 免费在线一级片| 日韩在线观看免费高清完整版| 久久97久久97精品免视看秋霞| 中文字幕一区二区三区四区在线视频| 亚洲妇女屁股眼交7| 欧美极品另类|