日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权

發布時間:2023/12/4 编程问答 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上一講中,我們已經完成了一個完整的案例,在這個案例中,我們可以通過Angular單頁面應用(SPA)進行登錄,然后通過后端的Ocelot API網關整合IdentityServer4完成身份認證。在本講中,我們會討論在當前這種架構的應用程序中,如何完成用戶授權。

回顧

  • 《Angular SPA基于Ocelot API網關與IdentityServer4的身份認證與授權(一)》

  • 《Angular SPA基于Ocelot API網關與IdentityServer4的身份認證與授權(二)》

  • 《Angular SPA基于Ocelot API網關與IdentityServer4的身份認證與授權(三)》

用戶授權簡介

在繼續分析我們的應用程序之前,我們簡單回顧一下用戶授權。在用戶登錄的過程中,系統首先確定當前試圖登錄的用戶是否為合法用戶,也就是該用戶是否被允許訪問應用程序,在這個過程中,登錄流程并不負責檢查用戶對哪些資源具有訪問權限,反正系統中存在用戶的合法記錄,就認證通過。接下來,該用戶賬戶就需要訪問系統中的各個功能模塊,并查看或者修改系統中的業務數據,此時,授權機制就會發揮作用,以便檢查當前登錄用戶是否被允許訪問某些功能模塊或者某些數據,以及該用戶對這些數據是否具有讀寫權限。這種決定用戶是否被允許以某種方式訪問系統中的某些資源的機制,稱為授權。

最常見的授權可以基于用戶組,也可以基于用戶角色,還可以組合用戶組與角色,實現基于角色的授權(Role Based Access Control,RBAC)。比如:某個“用戶”屬于“管理員組”,而“管理員組”的所有“用戶”都具有“管理員角色”,對于“管理員角色”,系統允許它可以管理和組織系統中的業務數據,但不能對用戶賬戶進行管理,系統希望只有超級管理員才可以管理用戶賬戶。于是,當某個用戶賬戶被添加到“管理員組”之后,該用戶賬戶就自動被賦予了“管理員角色”,它可以管理系統中的業務數據,但仍然無法對系統中的用戶賬戶進行管理,因為那是“超級管理員”的事情。

從應用程序的架構角度來看,不難得出這樣的結論:用戶認證可以通過第三方的框架或者解決方案來完成,但用戶授權一般都是在應用程序內部完成的,因為它的業務性很強。不同系統可以有不同的授權方式,但認證方式還是相對統一的,比如讓用戶提供用戶名密碼,或者通過第三方身份供應商(Identity Provider,IdP)完成單點登錄等等??v觀當下流行的認證服務供應商(例如Auth0),它們在認證這部分的功能非常強大,但僅提供一些相對簡單基礎的授權服務,幫助應用程序完成一些簡單的授權需求,雖然應用程序也可以依賴第三方服務供應商來統一完成認證與授權,但這并不是一個很好的架構實踐,因為對第三方服務的依賴性太強。

回顧我們的案例,至今為止,我們僅僅完成了用戶認證的部分,接下來,一起看看在Ocelot API網關中如何做用戶授權。

用戶授權的實現

在系統架構中引入API網關之后,實現用戶授權可以有以下兩種方式:

  • 在API網關處完成用戶授權。這種方式不需要后臺的服務各自實現自己的授權體系,用戶授權由API網關代為完成,如果授權失敗,API網關會直接返回授權失敗,不會將客戶端請求進一步轉發給后端的服務。優點是可以實現統一的授權機制,并且減少后端服務的處理壓力,后端服務無需關注和處理授權相關的邏輯;缺點是API網關本身需要知道系統的用戶授權策略

  • API網關將用戶賬戶信息傳遞給后端服務,由服務各自實現授權。這種做法優點是API網關無需關心由應用程序業務所驅動的授權機制,缺點是每個服務要各自管理自己的授權邏輯

  • 后端服務授權

    先來看看第二種方式,也就是API網關將用戶賬戶信息傳遞給后端服務,由后端服務完成授權。在前文中,我們可以看到,Access Token中已經包含了如下四個User Claims:

    • nameidentifier

    • name

    • emailaddress

    • role

    Ocelot允許將Token中所包含的Claims通過HTTP Header的形式傳遞到后端服務上去,做法非常簡單,只需要修改Ocelot的配置文件即可,例如:


    {

    ??"ReRoutes": [

    ????{

    ??????"DownstreamPathTemplate": "/weatherforecast",

    ??????"DownstreamScheme": "http",

    ??????"DownstreamHostAndPorts": [

    ????????{

    ??????????"Host": "localhost",

    ??????????"Port": 5000

    ????????}

    ??????],

    ??????"UpstreamPathTemplate": "/api/weather",

    ??????"UpstreamHttpMethod": [ "Get"?],

    ??????"AuthenticationOptions": {

    ????????"AuthenticationProviderKey": "AuthKey",

    ????????"AllowedScopes": []

    ??????},

    ??????"AddHeadersToRequest": {

    ????????"X-CLAIMS-NAME-IDENTIFIER": "Claims[http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier] > value > |",

    ????????"X-CLAIMS-NAME": "Claims[http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name] > value > |",

    ????????"X-CLAIMS-EMAIL": "Claims[http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress] > value > |",

    ????????"X-CLAIMS-ROLE": "Claims[http://schemas.microsoft.com/ws/2008/06/identity/claims/role] > value > |"

    ??????}

    ????}

    ??]

    }

    然后重新運行服務,并在后端服務的API Controller中設置斷點,可以看到,這四個Claims的數據都可以通過Request.Headers得到:

    有了這個信息,服務端就可以得知目前是哪個用戶賬戶在請求API調用,并且它是屬于哪個角色,剩下的工作就是基于這個角色信息來決定是否允許當前用戶訪問當前的API。很顯然,這里需要一種合理的設計,而且至少需要滿足以下兩個需求:

  • 授權機制的實現應該能夠被后端多個服務所重用,以便解決“每個服務要各自管理自己的授權邏輯”這一弊端

  • API控制器不應該自己實現授權部分的代碼,可以通過擴展中間件并結合C# Attribute的方式完成

  • 在這里我們就不深入討論如何去設計這樣一套權限認證系統了,今后有機會再介紹吧。

    注:Ocelot可以支持多種Claims的轉換形式,這里介紹的AddHeadersToRequest只是其中的一種,更多方式可以參考:https://ocelot.readthedocs.io/en/latest/features/claimstransformation.html

    Ocelot API網關授權

    通過Ocelot網關授權,有兩種比較常用的方式,一種是在配置文件中,針對不同的downstream配置,設置其RouteClaimsRequirement配置,以便指定哪些用戶角色能夠被允許訪問所請求的API資源。比如:


    {

    ??"ReRoutes": [

    ????{

    ??????"DownstreamPathTemplate": "/weatherforecast",

    ??????"DownstreamScheme": "http",

    ??????"DownstreamHostAndPorts": [

    ????????{

    ??????????"Host": "localhost",

    ??????????"Port": 5000

    ????????}

    ??????],

    ??????"UpstreamPathTemplate": "/api/weather",

    ??????"UpstreamHttpMethod": [ "Get"?],

    ??????"AuthenticationOptions": {

    ????????"AuthenticationProviderKey": "AuthKey",

    ????????"AllowedScopes": []

    ??????},

    ??????"RouteClaimsRequirement": {

    ????????"Role": "admin"

    ??????}

    ????}

    ??]

    }

    上面高亮部分的代碼指定了只有admin角色的用戶才能訪問/weatherforecast API,這里的“Role”就是Claim的名稱,而“admin”就是Claim的值。如果我們在此處將Role設置為superadmin,那么前端頁面就無法正常訪問API,而是獲得403 Forbidden的狀態碼:

    注意:理論上講,此處的“Role”原本應該是使用標準的Role Claim的名稱,即原本應該是:

    但由于ASP.NET Core框架在處理JSON配置文件時存在特殊性,使得上述標準的Role Claim的名稱無法被正確解析,因此,也就無法在RouteClaimsRequirement中正常使用。目前的解決方案就是用戶認證后,在Access Token中帶入一個自定義的Role Claim(在這里我使用最簡單的名字“Role”作為這個自定義的Claim的名稱,這也是為什么上面的JSON配置例子中,使用的是“Role”,而不是“http://schemas.microsoft.com/ws/2008/06/identity/claims/role”),而要做到這一點,就要修改兩個地方。

    首先,在IdentityService的Config.cs文件中,增加一個自定義的User Claim:


    public?static?IEnumerable<ApiResource> GetApiResources() =>

    ????new[]

    ????{

    ????????new?ApiResource("api.weather", "Weather API")

    ????????{

    ????????????Scopes =

    ????????????{

    ????????????????new?Scope("api.weather.full_access", "Full access to Weather API")

    ????????????},

    ????????????UserClaims =

    ????????????{

    ????????????????ClaimTypes.NameIdentifier,

    ????????????????ClaimTypes.Name,

    ????????????????ClaimTypes.Email,

    ????????????????ClaimTypes.Role,

    ????????????????"Role"

    ????????????}

    ????????}

    ????};

    然后,在注冊新用戶的API中,當用戶注冊信息包含Role時,將“Role” Claim也添加到數據庫中:


    [HttpPost]

    [Route("api/[controller]/register-account")]

    public?async Task<IActionResult> RegisterAccount([FromBody] RegisterUserRequestViewModel model)

    {

    ????if?(!ModelState.IsValid)

    ????{

    ????????return?BadRequest(ModelState);

    ????}

    ?

    ????var?user = new?AppUser { UserName = model.UserName, DisplayName = model.DisplayName, Email = model.Email };

    ?

    ?

    ????var?result = await _userManager.CreateAsync(user, model.Password);

    ?

    ????if?(!result.Succeeded) return?BadRequest(result.Errors);

    ?

    ????await _userManager.AddClaimAsync(user, new?Claim(ClaimTypes.NameIdentifier, user.UserName));

    ????await _userManager.AddClaimAsync(user, new?Claim(ClaimTypes.Name, user.DisplayName));

    ????await _userManager.AddClaimAsync(user, new?Claim(ClaimTypes.Email, user.Email));

    ?

    ????if?(model.RoleNames?.Count > 0)

    ????{

    ????????var?validRoleNames = new?List<string>();

    ????????foreach?(var?roleName in?model.RoleNames)

    ????????{

    ????????????var?trimmedRoleName = roleName.Trim();

    ????????????if?(await _roleManager.RoleExistsAsync(trimmedRoleName))

    ????????????{

    ????????????????validRoleNames.Add(trimmedRoleName);

    ????????????????await _userManager.AddToRoleAsync(user, trimmedRoleName);

    ????????????}

    ????????}

    ?

    ????????await _userManager.AddClaimAsync(user, new?Claim(ClaimTypes.Role, string.Join(',', validRoleNames)));

    ????????await _userManager.AddClaimAsync(user, new?Claim("Role", string.Join(',', validRoleNames)));

    ????}

    ?

    ????return?Ok(new?RegisterUserResponseViewModel(user));

    }

    修改完后,重新通過調用這個register-account API來新建一個用戶來進行測試,一切正常的話,就可以通過Ocelot API網關中的RouteClaimsRequirement來完成授權了。

    通過Ocelot網關授權的另一種做法是使用代碼實現。通過代碼方式,可以實現更為復雜的授權策略,我們仍然以“角色”作為授權參照,我們可以首先定義所需的授權策略:


    public?void?ConfigureServices(IServiceCollection services)

    {

    ????services.AddOcelot();

    ????services.AddAuthentication()

    ????????.AddIdentityServerAuthentication("AuthKey", options =>

    ????????{

    ????????????options.Authority = "http://localhost:7889";

    ????????????options.RequireHttpsMetadata = false;

    ????????});

    ?

    ????services.AddAuthorization(options =>

    ????{

    ????????options.AddPolicy("admin", builder => builder.RequireRole("admin"));

    ????????options.AddPolicy("superadmin", builder => builder.RequireRole("superadmin"));

    ????});

    ?

    ????services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()

    ???????.AllowAnyMethod()

    ???????.AllowAnyHeader()));

    }

    然后使用Ocelot的AuthorisationMiddleware中間件,來定義我們的授權處理邏輯:


    app.UseOcelot((b, c) =>

    {

    ????c.AuthorisationMiddleware = async (ctx, next) =>

    ????{

    ????????if?(ctx.DownstreamReRoute.DownstreamPathTemplate.Value == "/weatherforecast")

    ????????{

    ????????????var?authorizationService = ctx.HttpContext.RequestServices.GetService<IAuthorizationService>();

    ????????????var?result = await authorizationService.AuthorizeAsync(ctx.HttpContext.User, "superadmin");

    ????????????if?(result.Succeeded)

    ????????????{

    ????????????????await next.Invoke();

    ????????????}

    ????????????else

    ????????????{

    ????????????????ctx.Errors.Add(new?UnauthorisedError($"Fail to authorize policy: admin"));

    ????????????}

    ????????}

    ????????else

    ????????{

    ????????????await next.Invoke();

    ????????}

    ????};

    ?

    ????b.BuildCustomOcelotPipeline(c).Build();

    ?????

    }).Wait();

    當然,上面的BuildCustomOcelotPipeline方法的目的就是將一些默認的Ocelot中間件加入到管道中,否則整個Ocelot框架是不起作用的。我將這個方法定義為一個擴展方法,代碼如下:


    public?static?class?Extensions

    {

    ????private?static?void?UseIfNotNull(this?IOcelotPipelineBuilder builder,

    ????????Func<DownstreamContext, Func<Task>, Task> middleware)

    ????{

    ????????if?(middleware != null)

    ????????{

    ????????????builder.Use(middleware);

    ????????}

    ????}

    ?

    ????public?static?IOcelotPipelineBuilder BuildCustomOcelotPipeline(this?IOcelotPipelineBuilder builder,

    ????????OcelotPipelineConfiguration pipelineConfiguration)

    ????{

    ????????builder.UseExceptionHandlerMiddleware();

    ????????builder.MapWhen(context => context.HttpContext.WebSockets.IsWebSocketRequest,

    ????????????app =>

    ????????????{

    ????????????????app.UseDownstreamRouteFinderMiddleware();

    ????????????????app.UseDownstreamRequestInitialiser();

    ????????????????app.UseLoadBalancingMiddleware();

    ????????????????app.UseDownstreamUrlCreatorMiddleware();

    ????????????????app.UseWebSocketsProxyMiddleware();

    ????????????});

    ????????builder.UseIfNotNull(pipelineConfiguration.PreErrorResponderMiddleware);

    ????????builder.UseResponderMiddleware();

    ????????builder.UseDownstreamRouteFinderMiddleware();

    ????????builder.UseSecurityMiddleware();

    ????????if?(pipelineConfiguration.MapWhenOcelotPipeline != null)

    ????????{

    ????????????foreach?(var?pipeline in?pipelineConfiguration.MapWhenOcelotPipeline)

    ????????????{

    ????????????????builder.MapWhen(pipeline);

    ????????????}

    ????????}

    ????????builder.UseHttpHeadersTransformationMiddleware();

    ????????builder.UseDownstreamRequestInitialiser();

    ????????builder.UseRateLimiting();

    ?

    ????????builder.UseRequestIdMiddleware();

    ????????builder.UseIfNotNull(pipelineConfiguration.PreAuthenticationMiddleware);

    ????????if?(pipelineConfiguration.AuthenticationMiddleware == null)

    ????????{

    ????????????builder.UseAuthenticationMiddleware();

    ????????}

    ????????else

    ????????{

    ????????????builder.Use(pipelineConfiguration.AuthenticationMiddleware);

    ????????}

    ????????builder.UseClaimsToClaimsMiddleware();

    ????????builder.UseIfNotNull(pipelineConfiguration.PreAuthorisationMiddleware);

    ????????if?(pipelineConfiguration.AuthorisationMiddleware == null)

    ????????{

    ????????????builder.UseAuthorisationMiddleware();

    ????????}

    ????????else

    ????????{

    ????????????builder.Use(pipelineConfiguration.AuthorisationMiddleware);

    ????????}

    ????????builder.UseClaimsToHeadersMiddleware();

    ????????builder.UseIfNotNull(pipelineConfiguration.PreQueryStringBuilderMiddleware);

    ????????builder.UseClaimsToQueryStringMiddleware();

    ????????builder.UseLoadBalancingMiddleware();

    ????????builder.UseDownstreamUrlCreatorMiddleware();

    ????????builder.UseOutputCacheMiddleware();

    ????????builder.UseHttpRequesterMiddleware();

    ?

    ????????return?builder;

    ????}

    }

    與上文所提交的“后端服務授權”類似,我們需要在Ocelot API網關上定義并實現授權策略,有可能是需要設計一些框架來簡化用戶數據的訪問并提供靈活的、可復用的授權邏輯,由于這部分內容跟每個應用程序的業務關系較為密切,所以本文也就不深入討論了。

    總結

    至此,有關Angular SPA基于Ocelot API網關與IdentityServer4的身份認證與授權的介紹,就告一段落了。通過四篇文章,我們從零開始,一步步搭建微服務、基于IdentityServer4的IdentityService、Ocelot API網關以及Angular單頁面應用,并逐步介紹了認證與授權的實現過程。雖然沒有最終實現一個可被重用的授權框架,但基本架構也算是完整了,今后有機會我可以再補充認證、授權的相關內容,歡迎閱讀并提寶貴意見。

    源代碼

    訪問以下Github地址以獲取源代碼:

    https://github.com/daxnet/identity-demo

    總結

    以上是生活随笔為你收集整理的Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    美女黄视频免费 | 亚洲 欧美 国产 va在线影院 | 97久久精品午夜一区二区 | a级成人毛片 | 亚洲aⅴ一区二区三区 | 久草在线一免费新视频 | 激情视频91 | www.日日操.com| 视频在线国产 | 粉嫩一区二区三区粉嫩91 | 中国黄色一级大片 | 日日夜夜干 | 麻豆精品视频在线 | 久草网在线观看 | 欧美视屏一区二区 | 亚洲黄色免费观看 | 99精品国产aⅴ | 免费视频久久久久久久 | 色www. | 午夜av大片| 亚洲一区二区精品视频 | 999色视频| 国产精品porn | 欧美精品乱码久久久久久按摩 | 精品一区二区免费在线观看 | 精品免费在线视频 | 天天综合网天天 | 激情综合网五月婷婷 | 日韩精品免费一区二区在线观看 | 激情五月五月婷婷 | 黄色com| 国产手机免费视频 | 91麻豆福利 | 91精品在线免费 | 日韩丝袜 | 久久成年人| 97视频人人免费看 | 四虎在线视频免费观看 | 美女黄频视频大全 | 中文字幕精品一区久久久久 | 国产一区国产二区在线观看 | 亚洲国产成人久久综合 | 日韩在线第一区 | 国产毛片久久 | 日韩久久一区 | 国内精品久久久精品电影院 | 欧美激情亚洲综合 | 99久久婷婷国产精品综合 | 激情 亚洲| 18久久久久| 天天干天天看 | 2024国产在线| 日韩av进入| 97av视频 | 伊人伊成久久人综合网小说 | 精品中文字幕在线观看 | 成人一级影视 | 成在线播放 | 日韩欧美在线观看一区二区三区 | 狠狠gao | 在线观看亚洲成人 | 国产视频导航 | 亚洲欧美日韩在线一区二区 | 五月天婷婷狠狠 | 国产精品一区二区吃奶在线观看 | 五月天久久综合 | 久久看片网站 | 亚洲欧美国内爽妇网 | 婷婷在线资源 | 中文字幕一区二区三区在线视频 | 91香蕉视频 | 欧美性护士 | 91看片网址| 国产五月色婷婷六月丁香视频 | 婷婷色网站| 深夜精品福利 | av导航福利| 日韩视频二区 | 日韩在线免费视频观看 | 成人午夜网| 欧美无极色 | 91桃色在线观看视频 | 日本久久成人 | 美女在线黄| 97精品国产97久久久久久 | 又湿又紧又大又爽a视频国产 | 伊人午夜 | 国产精品正在播放 | 亚洲国产精品999 | 中文国产字幕 | 日日弄天天弄美女bbbb | 国产精品久久久久久高潮 | 久久国产高清 | 国产一区免费在线观看 | 欧美一级视频免费看 | 九九九国产 | 国内少妇自拍视频一区 | 午夜国产一区二区三区四区 | 国产免费久久av | 久久se视频 | 波多野结衣精品视频 | 伊人久久电影网 | 中文字幕免费高 | 夜夜操综合网 | av网站播放 | 91av视频在线播放 | 婷婷丁香视频 | 欧美激情精品 | 五月婷婷开心中文字幕 | 九九精品久久 | 亚洲成人频道 | www.香蕉视频在线观看 | 黄色国产在线 | 91精品办公室少妇高潮对白 | 国产 一区二区三区 在线 | 午夜三级毛片 | 狠狠做深爱婷婷综合一区 | 99热高清 | www.啪啪.com| av短片在线 | 国产超碰97 | 狠狠干夜夜爱 | 久久成人一区二区 | 夜添久久精品亚洲国产精品 | 91精品办公室少妇高潮对白 | 国产97在线看| 亚洲激色 | 国产精品爽爽久久久久久蜜臀 | 在线免费av观看 | 亚洲国产操 | 在线91视频 | 国产在线观看你懂的 | 91精品在线视频观看 | 国产精品久久久久久久久久久久久 | 91在线蜜桃臀 | 欧美日韩午夜 | 亚洲无吗视频在线 | 色小说av| 日韩一区二区三区高清在线观看 | 日韩av快播电影网 | 偷拍精偷拍精品欧洲亚洲网站 | 黄色免费网站下载 | 六月激情丁香 | 最新国产精品亚洲 | 粉嫩av一区二区三区四区在线观看 | 日本中文字幕一二区观 | 国产96在线观看 | 久久久久久久久综合 | 欧美一级免费黄色片 | 亚洲乱码国产乱码精品天美传媒 | 亚洲精品综合一二三区在线观看 | 天天夜夜狠狠操 | 国产小视频你懂的在线 | 亚洲国产69 | 欧美一级片在线播放 | freejavvideo日本免费 | 色综合中文字幕 | 色综合天天射 | 99热只有精品在线观看 | 成人国产精品久久久久久亚洲 | 久久人人做 | 国产视频久久 | 国产97碰免费视频 | 国产精品综合久久久久久 | 免费观看国产精品视频 | av大片免费 | 麻豆高清免费国产一区 | 色哟哟国产精品 | 久久与婷婷 | 在线91视频| 国产精品久久久久久久妇 | 在线视频专区 | www.xxxx欧美 | 久久一区二区三区四区 | 亚洲精品一区二区三区高潮 | 久久久在线免费观看 | 91精品国产91热久久久做人人 | 911免费视频 | 胖bbbb搡bbbb擦bbbb| 国产网红在线观看 | 97国产大学生情侣白嫩酒店 | 免费观看国产成人 | 综合网成人 | 欧美一级片在线播放 | 国产69精品久久99不卡的观看体验 | 精品一区二区在线看 | 一区二区视频电影在线观看 | 日韩激情av在线 | 欧美视频在线观看免费网址 | 在线看小早川怜子av | 精品亚洲视频在线 | 日韩欧美精品在线视频 | 精品国产一区二区三区久久久蜜臀 | 亚洲视频一区二区三区在线观看 | 久久成人免费视频 | 国产精品久久久久av福利动漫 | 日本久久精 | 亚洲一区动漫 | 999久久久免费精品国产 | 国产精品美女在线 | 在线国产视频一区 | 国产aa精品| 亚洲欧洲精品视频 | 天天插天天射 | 日韩乱码中文字幕 | 国产一级视屏 | 五月婷社区 | 麻豆视频在线免费观看 | 日韩欧美国产视频 | 亚洲一区二区三区miaa149 | 亚洲综合成人专区片 | 在线亚洲午夜片av大片 | 丁香六月婷婷开心婷婷网 | 免费黄色在线 | 99欧美精品 | 精品人妖videos欧美人妖 | 人人玩人人添人人澡超碰 | 超碰在线免费97 | 亚洲a资源| 天天干夜夜干 | 一级免费看| 欧美一区二区三区免费观看 | www国产一区 | 日韩在线观看 | 99精品久久精品一区二区 | 亚洲精品乱码久久久久久蜜桃欧美 | 8090yy亚洲精品久久 | 国产亚洲欧美日韩高清 | 国产成人一区二区三区电影 | 激情av网| 中文字幕一区二区三区久久 | 亚洲国产中文在线 | 视频成人免费 | 欧美狠狠色 | 最近中文字幕免费av | 在线看不卡av | 亚洲精品自拍 | 日韩中文字幕网站 | 俺要去色综合狠狠 | 日本中文一区二区 | 最近能播放的中文字幕 | 一级理论片在线观看 | 天天操天| 亚洲精品9 | 欧美精品一级视频 | 国产第一页精品 | 国产精品6999成人免费视频 | 久久超| 免费成人在线视频网站 | 国产精品色在线 | 综合铜03 | 日韩视 | 日韩在线观看一区二区三区 | 久草精品资源 | 久久久麻豆精品一区二区 | 国产黄色精品 | 日韩女同av | 欧美肥妇free| 99精品视频在线观看免费 | 国产日韩在线看 | 九九久久久久99精品 | 在线观看国产一区 | 成人在线免费观看网站 | 久久久久久久精 | 亚洲影视九九影院在线观看 | 国产黄色大片 | 精品视频免费观看 | 欧美日韩久久久 | 成人午夜电影在线 | 久久久国际精品 | av电影在线观看完整版一区二区 | 一级片视频在线 | 美女视频黄免费的 | 美女在线观看网站 | 2019免费中文字幕 | 天天躁天天狠天天透 | 亚洲欧美视频在线播放 | 日韩高清一区在线 | 看v片| 黄色大片免费网站 | 黄在线免费看 | 免费看污污视频的网站 | 激情五月综合 | 免费精品视频在线观看 | 99色婷婷 | 久久国产精品视频观看 | 日韩av片无码一区二区不卡电影 | 香蕉视频久久久 | 国产精品视频久久 | 成人av播放 | 亚洲国产无| 91丨porny丨九色 | 国产少妇在线观看 | 国产午夜精品一区二区三区 | 激情 亚洲| 天天射综合 | 久久爽久久爽久久av东京爽 | 久久午夜电影院 | 四虎成人精品 | 日本巨乳在线 | 韩国av在线播放 | 小草av在线播放 | 亚州性色 | 日本久久中文 | 亚洲精品456在线播放乱码 | 日韩精品免费一线在线观看 | 久久成人高清 | 亚洲成人蜜桃 | 国产少妇在线观看 | 美女精品网站 | 免费看日韩片 | 91亚洲精 | 亚洲精品久 | 又湿又紧又大又爽a视频国产 | 一个色综合网站 | 欧美日韩精品影院 | 色综合国产 | 亚洲一本视频 | 欧美成人黄色片 | 2019久久精品 | 伊人久久五月天 | 久久国产高清视频 | 91麻豆精品国产91久久久使用方法 | 欧美激情视频一区 | 精品国产观看 | 伊人久久婷婷 | 免费日韩高清 | 五月婷婷中文网 | 999精品| 久久精品视频一 | 国产成人精品在线观看 | www.夜夜| 不卡的av| 伊人五月天.com | 中文字幕一区二区三区在线播放 | 激情五月视频 | 婷婷六月天综合 | 天天综合中文 | a√天堂资源 | 中文字幕 国产专区 | 久久免费在线观看 | 欧美一区二区三区在线看 | 免费av观看网站 | 欧美韩国日本在线观看 | 国产我不卡 | 国产高清视频在线观看 | 亚洲黄污| 成人免费 在线播放 | 免费在线看成人av | 亚洲成人av片 | 国产专区精品 | a久久免费视频 | 国产区第一页 | 欧美一级视频一区 | 一区二区三区免费看 | 欧美日韩国产欧美 | 日韩精品综合在线 | 久久新视频 | 免费看国产一级片 | 国产一二区视频 | 亚洲电影av在线 | 亚洲精品黄 | 91在线免费观看网站 | 国产毛片久久久 | 午夜色婷婷 | 国产精品第一视频 | 视频福利在线观看 | 免费看亚洲毛片 | 日韩精品一区二区三区中文字幕 | 国产欧美日韩精品一区二区免费 | 欧美性久久久久久 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 国产精品久久久久久吹潮天美传媒 | 国产免费亚洲 | 天天曰夜夜操 | 最新日韩视频在线观看 | 日本成人中文字幕在线观看 | 日韩在线视频精品 | 日韩av一区二区三区 | 日韩av在线小说 | 最近中文字幕完整高清 | 91丨九色丨91啦蝌蚪老版 | 亚洲五月六月 | 91在线麻豆| 成人sm另类专区 | 三级黄色三级 | 亚洲欧美综合精品久久成人 | 亚洲精品国精品久久99热 | 丁香色婷| 国产一二三四在线观看视频 | 不卡的一区二区三区 | 国产福利不卡视频 | 日本久久99| 91桃色在线观看视频 | 四虎影视4hu4虎成人 | 中文字幕日韩在线播放 | 婷婷看片 | 色网站黄 | 91视频国产免费 | 成人高清在线观看 | 黄网站www| 国产无套精品久久久久久 | 久久成电影 | 午夜三级影院 | 欧美黄网站 | 国产一区二区综合 | 国产成人精品久 | 天天综合网天天 | 97精品免费视频 | 国产精品99久久久精品 | 蜜臀av夜夜澡人人爽人人桃色 | av在线com | 色午夜影院 | 97视频在线观看免费 | 日韩欧美精品在线 | 97超碰资源总站 | 91在线视频免费播放 | 天天操天天操 | 黄色免费大片 | 丰满少妇麻豆av | 精品国产自在精品国产精野外直播 | 国产精品99爱| 亚洲 欧美变态 另类 综合 | 91日韩在线专区 | 黄色免费网 | 国产91在线 | 美洲 | av成人在线网站 | 亚洲成a人片在线观看网站口工 | 亚洲高清视频在线 | 久热免费在线 | 欧洲精品久久久久毛片完整版 | 一区二区久久久久 | 久久999精品| 亚欧洲精品视频在线观看 | 久久影院精品 | 91大神精品视频在线观看 | 手机看国产毛片 | 日本99热 | av色综合网 | 亚洲成人国产 | 成人国产精品电影 | 精产嫩模国品一二三区 | 免费黄色一区 | 亚洲日本黄色 | 一区二区男女 | 欧美性春潮| 一区二区三区四区在线免费观看 | 久久国内精品 | 美女视频黄在线 | 久久免费视频这里只有精品 | 在线播放亚洲 | 精品久久久久久久久久 | 五月婷婷激情五月 | 久久高清精品 | 国产精品久久久久久99 | 中文字幕在线网 | 国产va精品免费观看 | 中文av一区二区 | 婷婷综合电影 | 91中文字幕永久在线 | 人人插人人玩 | 黄色小视频在线观看免费 | 99久久精品国产亚洲 | 天天做日日爱夜夜爽 | 成年人三级网站 | 99免费看片 | 午夜12点 | 欧美激情第一区 | 天天草夜夜 | 精品久久在线 | 绯色av一区 | 国产精品久久久久久久久免费看 | 国产精品成人一区二区 | 日产av在线播放 | 色综合久久88色综合天天 | 成人综合婷婷国产精品久久免费 | 亚洲最大成人网4388xx | 国产精品久久久久国产精品日日 | 欧美在线观看视频 | 欧美日韩高清在线一区 | 一区中文字幕电影 | 91精品视频在线播放 | 国产精品成人aaaaa网站 | 色偷偷888欧美精品久久久 | 久久久久人人 | 3d黄动漫免费看 | 欧美日韩视频观看 | 黄www在线观看 | 一区二区 不卡 | 日韩国产欧美在线视频 | 精品国偷自产在线 | 99性视频| 亚洲精品乱码久久久久久高潮 | avv天堂| 日韩免费在线网站 | 成人欧美亚洲 | 日韩av在线不卡 | 婷婷中文在线 | 久久手机视频 | 中文欧美字幕免费 | 日韩av成人免费看 | 欧美国产三区 | 日韩视频在线观看视频 | 在线小视频国产 | 在线a人v观看视频 | 久久精品视频4 | 在线免费黄色av | 国产视频精品网 | 狠狠狠狠狠狠天天爱 | 色婷婷狠狠五月综合天色拍 | 国产精品嫩草影院99网站 | 日韩一区二区免费播放 | 日韩理论在线播放 | 首页中文字幕 | 91人人澡人人爽 | 亚洲免费小视频 | 久久精品这里精品 | 免费在线观看污 | 亚洲女人天堂成人av在线 | 亚洲精品黄色片 | 一级黄色片在线免费看 | 激情伊人| 免费亚洲片 | 成人精品久久久 | 久久综合五月天婷婷伊人 | 婷婷草 | 日韩精品免费在线观看视频 | 欧美日韩二三区 | 中日韩免费视频 | 成人福利在线播放 | 国内精品在线看 | 精品美女久久久久 | 久久99爱视频 | 黄色a视频 | 免费a v在线 | 欧美在线观看小视频 | 黄色大片免费播放 | 狠狠色丁香婷婷综合视频 | 99色亚洲 | 日韩视频1 | 天天干天天射天天插 | 日本精品一区二区三区在线播放视频 | 97超碰人人澡人人 | 丁香婷婷深情五月亚洲 | 亚洲精品777 | 天天天干天天天操 | 91在线永久| 久热免费 | 免费a网址 | 久久久久在线观看 | 欧美在线91| 天天爽天天搞 | 五月天,com | 亚洲97在线 | 亚洲欧洲成人精品av97 | 精品日韩av| 66av99精品福利视频在线 | 一区二区三区在线电影 | 日韩中文在线视频 | 国产美女免费 | 手机看片1042 | 91精品视频在线免费观看 | 欧美一区二区三区免费观看 | 国产精品一区二区在线 | 激情视频免费在线观看 | 中文字幕免费国产精品 | 日本护士撒尿xxxx18 | aaa黄色毛片 | 一本一本久久a久久精品综合妖精 | 欧美国产日韩在线视频 | 婷婷在线网站 | av天天澡天天爽天天av | 黄色在线免费观看网址 | 99久久99久久精品国产片果冰 | 国产视频黄 | 亚洲精品视频在线播放 | 中文字幕一区二区三区精华液 | 国产在线无 | 天天视频色版 | 国产精品日韩久久久久 | 国产精品18videosex性欧美 | 在线韩国电影免费观影完整版 | 日韩免费在线观看网站 | 激情网五月婷婷 | 伊人av综合| h网站免费在线观看 | 96看片| 成人精品久久久 | 国产91精品久久久久 | 97在线免费视频观看 | 九九热有精品 | 97超碰网 | 色婷婷狠狠五月综合天色拍 | 色五月成人 | 在线国产99| 久草在线视频精品 | 丁香久久综合 | 久久久黄色免费网站 | 天天射网 | 色999视频| 国产在线不卡 | 中文字幕av网站 | 中文在线免费一区三区 | 日p在线观看| 亚洲精品视频在线观看视频 | 国产在线精品国自产拍影院 | 欧美日韩网站 | 精品国内自产拍在线观看视频 | 人人干干人人 | 免费 在线 中文 日本 | 婷婷视频在线播放 | 特级免费毛片 | 久久精品爱爱视频 | 亚洲少妇影院 | 中文字幕久久精品 | 久草在线播放视频 | 日韩91精品| 久久久久久久国产精品视频 | 久久婷婷开心 | 国产日韩欧美在线观看 | 国产手机视频在线观看 | 国产99久久九九精品免费 | 99精品国产99久久久久久福利 | 国产精品成人免费 | 美女黄久久 | 狠狠操夜夜| 久久女教师 | 天天综合久久综合 | 99精品视频免费看 | www黄色| 在线观看免费视频 | 久久一久久 | 国模吧一区 | 四虎影视国产精品免费久久 | 69xxxx欧美 | 国产精品99久久免费观看 | 欧美激情视频一区二区三区免费 | 国产精品九九九 | 国产最新91 | 97超碰人人干 | 中文免费 | 人人擦 | 在线视频在线观看 | 激情欧美一区二区三区免费看 | 日韩欧美精品免费 | 伊人影院在线观看 | 一级性视频 | 成人a v视频 | 日韩综合一区二区 | 99在线视频免费观看 | 91中文字幕视频 | 国产一级a毛片视频爆浆 | 国产91全国探花系列在线播放 | 香蕉视频最新网址 | 天天操网址 | 中文在线字幕免费观 | 五月天天色 | 国产精品久久久久久久婷婷 | 亚洲国产视频直播 | av黄色在线观看 | 免费69视频 | 中文字幕色婷婷在线视频 | 超碰97在线看 | 97视频中文字幕 | 亚洲日本欧美在线 | 午夜视频在线观看欧美 | 日韩亚洲国产中文字幕 | 91资源在线视频 | 色七七亚洲影院 | 狠狠综合 | 欧美日韩在线观看一区 | 91精品日韩 | 亚洲精品久久久久久久蜜桃 | 五月婷婷丁香在线观看 | 在线免费观看国产黄色 | 婷婷深爱 | 一区二区三区精品在线视频 | 国产精品原创av片国产免费 | 视频在线国产 | 黄色软件在线观看视频 | 国产精品av免费观看 | 干天天| 区一区二区三区中文字幕 | 欧美日韩免费观看一区=区三区 | 91av视屏| 中文字幕乱码在线播放 | 欧美福利视频一区 | 狠狠干免费| 午夜精品一区二区三区四区 | 久久综合狠狠综合久久激情 | 欧美日韩精品在线观看视频 | 久久精品小视频 | 色狠狠婷婷| 天天干天天拍天天操 | 欧美性色黄 | 天天看天天干天天操 | 中文字幕在线观看av | 狠狠搞,com | 国产亚洲精品久久久久久久久久久久 | 久久久久久久久久亚洲精品 | 中文字幕第一页在线播放 | 亚洲91中文字幕无线码三区 | 波多野结衣电影一区二区三区 | 免费看黄色毛片 | 国产一级做a爱片久久毛片a | 三级免费黄 | 国产免费中文字幕 | 婷婷色影院 | av福利在线 | 日韩在线观看的 | 91在线操 | www.99久久.com| 久久久久久久久久久久av | 精品日本视频 | 网站免费黄色 | 456成人精品影院 | 亚洲精品在线一区二区三区 | 欧美成人基地 | 91精品一区国产高清在线gif | 久久草在线免费 | 人人爽人人爽人人片 | 久久精品欧美日韩精品 | 欧美精品在线视频 | 丁香一区二区 | 好看av在线 | 久久久久久欧美二区电影网 | 精品爱爱 | 在线视频你懂 | 丁香婷婷在线 | 一二三区在线 | 成人av免费看 | 久久成人免费视频 | 国产人成在线观看 | 日韩av看片| 999超碰| 欧美另类重口 | 三级小视频在线观看 | 91九色视频国产 | 2019免费中文字幕 | 精品国产一区二区三区蜜臀 | 免费看黄色小说的网站 | 欧美a级一区二区 | 欧美成年人在线观看 | 成年人电影免费看 | 麻豆久久 | av免费网页 | 久久a久久| 精品亚洲免费 | 亚洲国产片色 | 日本久久片| 一区二区三区四区精品 | 欧美天堂视频在线 | 免费在线国产黄色 | 97人人模人人爽人人喊中文字 | 天天干天天做天天操 | 99久久er热在这里只有精品15 | 亚洲视频久久久 | 午夜精品久久久久久久久久久久 | 人人爽爽人人 | 九九综合九九综合 | 国产一区 在线播放 | 最近中文字幕免费视频 | 精品久久久久久久久久久久久久久久久久 | 免费黄色a网站 | 国产视频久久久久 | 成年人在线免费看片 | 国产视频精品久久 | 成人禁用看黄a在线 | 黄色国产成人 | 久久视频免费在线观看 | 婷婷伊人综合亚洲综合网 | 美女免费av | 久久国产免 | 不卡中文字幕在线 | 国产精品9999久久久久仙踪林 | 六月丁香在线视频 | 国产黄色大片 | 永久免费毛片 | 国产精品一级视频 | 国精产品满18岁在线 | 中文字幕色婷婷在线视频 | 亚洲永久国产精品 | 久草视频国产 | 欧美日韩高清一区 | 午夜精品视频免费在线观看 | 丁香六月综合网 | 97色免费视频 | 天天干天天摸 | va视频在线观看 | 麻豆传媒电影在线观看 | 黄色的网站免费看 | 欧美日一级片 | 人人干人人草 | 国产黄色片久久 | av高清网站在线观看 | 亚洲精品玖玖玖av在线看 | 黄网站色视频 | 久久中文字幕视频 | 国产精品乱码一区二区视频 | 日韩免费高清在线观看 | 在线免费观看不卡av | av电影一区二区三区 | 91在线入口 | 精品视频久久久久久 | 免费观看的黄色 | 日韩成片 | 操操日 | 97在线视频免费看 | 午夜视频在线观看一区二区 | 99免费在线视频观看 | 日韩精品视频免费在线观看 | 日韩免费高清在线 | 亚洲在线 | 国产在线精品播放 | 国产精品免费看久久久8精臀av | 激情五月婷婷激情 | 狠狠网 | 国产精久久久久久妇女av | 日韩激情小视频 | 久久99国产精品 | 久久另类小说 | 超级碰碰碰免费视频 | 国产视频精品视频 | 天天爱天天插 | 久久视了 | 免费日韩高清 | 激情电影影院 | 国产精品黄色 | 一区二区视频免费在线观看 | 色一级片| 97视频一区 | 96香蕉视频 | 免费观看性生交大片3 | 亚洲va欧洲va国产va不卡 | 激情五月婷婷综合 | 亚洲天天综合网 | 丁香婷婷社区 | 久久久久久久综合色一本 | 欧美贵妇性狂欢 | 五月天久久婷 | 91色网址 | 国产亚洲精品久久久网站好莱 | 色a网| 精品毛片在线 | 久久免费视屏 | 四川妇女搡bbbb搡bbbb搡 | 91久久在线观看 | 亚洲黄色免费观看 | 黄网站大全 | www.888av | 麻豆系列在线观看 | 日韩av中文在线 | 国产亚洲资源 | 欧美日韩午夜 | 97视频总站 | 美女视频黄免费的久久 | 欧美一二三四在线 | 色婷婷综合视频在线观看 | 黄色电影小说 | 久久综合久久综合九色 | 久久精品一级片 | 五月婷婷另类国产 | 久久国产美女 | 久久理伦片 | 日韩18p| 日韩一区二区三区在线看 | 日本黄色a级大片 | 国产一级一级国产 | 色网站在线 | 日日操夜夜操狠狠操 | 永久免费精品视频网站 | av中文在线影视 | 亚洲综合干| 成人黄色在线 | 成人h动漫精品一区二 | 黄色日视频 | 蜜臀av麻豆 | 色av资源网| 91视频免费视频 | 天天干亚洲 | 精品一区三区 | 日本视频久久久 | 久久精品国产一区二区电影 | 国产精品1区2区3区 久久免费视频7 | 国产高清黄色 | 超碰在线天天 | av在线最新| 在线观看韩日电影免费 | 亚洲成a人片77777潘金莲 | 久久人人爽人人爽人人片av软件 | 免费看一及片 | 久久影视精品 | 国产精品精品久久久久久 | 青青网视频 | 一本—道久久a久久精品蜜桃 | 国产精品18久久久久久不卡孕妇 | 激情九九| 2023av| 成人av免费播放 | 日韩激情综合 | 韩日精品在线观看 | 日韩免费一区 | 欧美色精品天天在线观看视频 | 成人黄色片在线播放 | 久久久久欧美精品 | 国产中文字幕在线视频 | 欧美性春潮 | 国产成人99av超碰超爽 | 成年人电影毛片 | 看国产黄色大片 | 国产成人精品亚洲精品 | 婷婷在线免费观看 | 国产精品99久久久久久武松影视 | 在线观看成人一级片 | 精品a级片 | 国产小视频91 | 久二影院 | 一区二区精品视频 | 久草视频视频在线播放 | 精品国产片 | 久久精品亚洲精品国产欧美 | 日本中文字幕免费观看 | 色七七亚洲影院 | 91精品国产自产在线观看永久 | 国产又粗又长的视频 | 亚洲一级久久 | 2019天天干夜夜操 | 精品国产一二三 | 欧美日韩视频网站 | 国产91国语对白在线 | 日本中文乱码卡一卡二新区 | 日韩二三区| 999成人国产 | 午夜精品视频一区二区三区在线看 | 五月激情姐姐 | 一级全黄毛片 | 激情综合六月 | 日韩一二三 | 久久精品黄 | 伊人www22综合色 | 亚洲精品免费在线视频 | 久久九九久久 | 欧美成人理伦片 | 日韩女同一区二区三区在线观看 | 日韩黄色免费看 | 韩国三级在线一区 | 欧美一级视频一区 | 五月天精品视频 | 狠狠gao | 日韩免费看视频 | 乱男乱女www7788 | 黄色大全免费网站 | 激情校园亚洲 | 久久艹99| 亚洲免费在线视频 | 欧美日在线观看 | 丁香五香天综合情 | 亚洲人成人99网站 | 亚洲精品视频在线免费 | 国产日韩欧美在线免费观看 | 久久黄色免费 | 亚洲 欧美 综合 在线 精品 | 国产精品黑丝在线观看 | 夜夜躁日日躁狠狠久久av | 99re8这里有精品热视频免费 | 日韩在线观看三区 | 亚洲黄色免费在线 | 国产精选在线观看 | 91麻豆看国产在线紧急地址 | 国产精品97| 日韩精品一区不卡 | 久久99操| 久99久精品 | 日本中文乱码卡一卡二新区 | 国产精品视频免费观看 | 精品视频久久久 | 人人视频网站 | 91av大全| 午夜精品久久久久久久99 | 日韩免费在线视频观看 | av免费网页 | 国产96精品 | 亚洲综合色视频在线观看 | 亚洲日本va午夜在线电影 | 久久国产精品99久久人人澡 | 黄色小说免费在线观看 | 亚洲 中文 在线 精品 | 国产精品国产毛片 | 狠狠干我 | 九九影视理伦片 | 久久视频免费在线观看 | 国产精品18久久久久久不卡孕妇 | 国产精品99页 | 久久精品视频免费播放 | 日韩精品短视频 | 亚洲精品久久久久www | 在线午夜 | 国产精品电影一区 |