国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Blazor HyBrid 授權(quán)講解

這篇具有很好參考價(jià)值的文章主要介紹了Blazor HyBrid 授權(quán)講解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Blazor HyBrid 授權(quán)講解

本文介紹 ASP.NET Core 對(duì) Blazor Hybrid 應(yīng)用中的安全配置和管理及 ASP.NET Core Identity 的支持。

Blazor Hybrid 應(yīng)用中的身份驗(yàn)證由本機(jī)平臺(tái)庫(kù)處理,因?yàn)楹笳咛峁┝藶g覽器沙盒無(wú)法給予的經(jīng)過(guò)增強(qiáng)的安全保證。 本機(jī)應(yīng)用的身份驗(yàn)證使用特定于操作系統(tǒng)的機(jī)制或通過(guò)聯(lián)合協(xié)議,如 OpenID Connect (OIDC)。 按照針對(duì)應(yīng)用選擇的標(biāo)識(shí)提供者指南進(jìn)行操作,然后使用本文中的指南進(jìn)一步集成標(biāo)識(shí)與 Blazor。

集成身份驗(yàn)證必須為 Razor 組件和服務(wù)實(shí)現(xiàn)以下目標(biāo):

  • 使用 Microsoft.AspNetCore.Components.Authorization 包中的抽象,例如 AuthorizeView。
  • 對(duì)身份驗(yàn)證上下文中的更改做出回應(yīng)。
  • 訪問(wèn)憑據(jù)由標(biāo)識(shí)提供者的應(yīng)用預(yù)配,例如用于執(zhí)行授權(quán) API 調(diào)用的訪問(wèn)令牌。

準(zhǔn)備工作

  • 安裝Masa Blazor的模板,如果已經(jīng)安裝則忽略
dotnet new install Masa.Template::1.0.0-rc.2
  • 創(chuàng)建項(xiàng)目Photino項(xiàng)目模板

  • 添加Microsoft.AspNetCore.Components.Authorization NuGet包到項(xiàng)目文件中

    <PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="7.0.5" />
    

自定義AuthenticationStateProvider處理程序

創(chuàng)建CustomAuthenticationStateProvider然后繼承AuthenticationStateProvider

CustomAuthenticationStateProvider.cs代碼文件

using Microsoft.AspNetCore.Components.Authorization;
using System.Security.Claims;

namespace MasaBlazorApp1;

public class CustomAuthenticationStateProvider : AuthenticationStateProvider
{
    private ClaimsPrincipal User { get; set; }

    public override Task<AuthenticationState> GetAuthenticationStateAsync()
    {
        if (User != null)
        {
            return Task.FromResult(new AuthenticationState(User));
        }
        var identity = new ClaimsIdentity();
        User = new ClaimsPrincipal(identity);

        return Task.FromResult(new AuthenticationState(User));
    }

    public void AuthenticateUser(string emailAddress)
    {
        var identity = new ClaimsIdentity(new[]
        {
            new Claim(ClaimTypes.Name, emailAddress),
        }, "Custom Authentication");

        User = new ClaimsPrincipal(identity);

        NotifyAuthenticationStateChanged(
            Task.FromResult(new AuthenticationState(User)));
    }
}

在繼承AuthenticationStateProvider方法會(huì)要重寫(xiě)GetAuthenticationStateAsync方法,用于給授權(quán)組件獲取授權(quán)信息,

在這個(gè)代碼當(dāng)中的User是用于存儲(chǔ)持久化我們的用戶信息的如果需要對(duì)于授權(quán)修改,我們只需要修改這個(gè)自定義的處理程序即可。然后我們?cè)?code>CustomAuthenticationStateProvider中還自定義了AuthenticateUser這個(gè)是根據(jù)實(shí)際需求去實(shí)現(xiàn),在目前這個(gè)代碼中我們實(shí)現(xiàn)了個(gè)簡(jiǎn)單的Name在最后有一個(gè)NotifyAuthenticationStateChanged的調(diào)用,NotifyAuthenticationStateChanged是干啥的?NotifyAuthenticationStateChanged也是AuthenticationStateProvider提供的方法,核心功能是用于通知我們的授權(quán)狀態(tài)被修改。

打開(kāi)Program.cs然后注入我們的CustomAuthenticationStateProvider服務(wù),在添加注入CustomAuthenticationStateProvider之前我們實(shí)現(xiàn)添加注入了AddAuthorizationCore,這個(gè)需要注意。

using MasaBlazorApp1;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Photino.Blazor;

internal class Program
{
    [STAThread]
    private static void Main(string[] args)
    {
        var builder = PhotinoBlazorAppBuilder.CreateDefault(args);

        builder.RootComponents.Add<App>("#app");
        builder.Services.AddMasaBlazor();

        builder.Services.AddAuthorizationCore();
        builder.Services.TryAddSingleton<AuthenticationStateProvider, CustomAuthenticationStateProvider>();

        var app = builder.Build();

        app.MainWindow
            .SetTitle("Photino Blazor Sample");

        AppDomain.CurrentDomain.UnhandledException += (sender, error) =>
        {
        };

        app.Run();
    }
}

然后繼續(xù)打開(kāi)我們的App.razor添加授權(quán)相關(guān)組件,修改之前在_Imports.razor添加以下引用

@using Microsoft.AspNetCore.Components.Authorization

添加未授權(quán)時(shí)顯示的組件Shared/Login.razor,組件提供了一個(gè)輸入框和一個(gè)按鈕,輸入框輸入用戶名,按鈕則使用我們自定義的CustomAuthenticationStateProvider中提供的AuthenticateUser方法,用于更新授權(quán)信息從而刷新到授權(quán)的組件當(dāng)中。

@inject AuthenticationStateProvider AuthenticationStateProvider

<MTextField @bind-Value="_userName" />

<MButton @onclick="SignIn">登錄</MButton>

@code {
    private string _userName = "賬號(hào)";

    private void SignIn()
    {
        ((CustomAuthenticationStateProvider)AuthenticationStateProvider)
            .AuthenticateUser(_userName);
    }
}

App.razor文件

@namespace MasaBlazorApp1

<CascadingAuthenticationState>
    <Router AppAssembly="@typeof(App).Assembly">
        <Found Context="routeData">
            <AuthorizeView>
                <Authorized>
                    <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
                    </RouteView>
                </Authorized>
                <NotAuthorized>
                    <Login/>
                </NotAuthorized>
            </AuthorizeView>
            <FocusOnNavigate RouteData="@routeData" Selector="h1"/>
        </Found>
        <NotFound>
            <LayoutView Layout="@typeof(MainLayout)">
                <p role="alert">Sorry, there's nothing at this address.</p>
            </LayoutView>
        </NotFound>
    </Router>
</CascadingAuthenticationState>

App.razor文件在Router中添加了AuthorizeView組件,用于顯示授權(quán)顯示的組件和未授權(quán)顯示的組件。當(dāng)有授權(quán)的情況下我們將使用默認(rèn)的MainLayout布局,如果是未授權(quán)我們將實(shí)現(xiàn)Login,需要注意的是我們?cè)诮M件最外層添加了CascadingAuthenticationState這個(gè)是核心組件,

CascadingAuthenticationState.cs 的反編譯以后的代碼,在組件當(dāng)中注入了AuthenticationStateProvider然后在進(jìn)入OnInitialized事件的時(shí)候?qū)τ?code>AuthenticationStateProvider提供的AuthenticationStateChanged事件進(jìn)行了監(jiān)聽(tīng),這個(gè)也就對(duì)應(yīng)到了上面提到的NotifyAuthenticationStateChanged,當(dāng)調(diào)用到NotifyAuthenticationStateChanged的時(shí)候會(huì)觸發(fā)到AuthenticationStateChanged的事件,然后會(huì)觸發(fā)組件的OnAuthenticationStateChanged方法,進(jìn)行授權(quán)狀態(tài)更新,這個(gè)也就是核心的組件。

    #line hidden
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Components;
    public partial class CascadingAuthenticationState : global::Microsoft.AspNetCore.Components.ComponentBase, IDisposable
    {
        #pragma warning disable 1998
        protected override void BuildRenderTree(global::Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder)
        {
            __builder.OpenComponent<global::Microsoft.AspNetCore.Components.CascadingValue<System.Threading.Tasks.Task<AuthenticationState>>>(0);
            __builder.AddAttribute(1, "Value", global::Microsoft.AspNetCore.Components.CompilerServices.RuntimeHelpers.TypeCheck<System.Threading.Tasks.Task<AuthenticationState>>(
#nullable restore
#line 4 "D:\a\_work\1\s\src\Components\Authorization\src\CascadingAuthenticationState.razor"
                                                                                  _currentAuthenticationStateTask

#line default
#line hidden
#nullable disable
            ));
            __builder.AddAttribute(2, "ChildContent", (global::Microsoft.AspNetCore.Components.RenderFragment)(
#nullable restore
#line 4 "D:\a\_work\1\s\src\Components\Authorization\src\CascadingAuthenticationState.razor"
                                                                                                                                  ChildContent

#line default
#line hidden
#nullable disable
            ));
            __builder.CloseComponent();
        }
        #pragma warning restore 1998
#nullable restore
#line 6 "D:\a\_work\1\s\src\Components\Authorization\src\CascadingAuthenticationState.razor"
       
    private Task<AuthenticationState>? _currentAuthenticationStateTask;

    /// <summary>
    /// The content to which the authentication state should be provided.
    /// </summary>
    [Parameter]
    public RenderFragment? ChildContent { get; set; }

    protected override void OnInitialized()
    {
        AuthenticationStateProvider.AuthenticationStateChanged += OnAuthenticationStateChanged;

        _currentAuthenticationStateTask = AuthenticationStateProvider
            .GetAuthenticationStateAsync();
    }

    private void OnAuthenticationStateChanged(Task<AuthenticationState> newAuthStateTask)
    {
        _ = InvokeAsync(() =>
        {
            _currentAuthenticationStateTask = newAuthStateTask;
            StateHasChanged();
        });
    }

    void IDisposable.Dispose()
    {
        AuthenticationStateProvider.AuthenticationStateChanged -= OnAuthenticationStateChanged;
    }

#line default
#line hidden
#nullable disable
        [global::Microsoft.AspNetCore.Components.InjectAttribute] private AuthenticationStateProvider AuthenticationStateProvider { get; set; }
    }
}

效果

啟動(dòng)項(xiàng)目查看具體效果

默認(rèn)進(jìn)入登錄界面,由于我們并沒(méi)有授權(quán)信息,所以進(jìn)入這個(gè)界面,然后我們隨便輸入一些內(nèi)容點(diǎn)擊登錄。

當(dāng)我們點(diǎn)擊了登錄按鈕以后我們就進(jìn)入到了MainLayout當(dāng)中并且進(jìn)入了首頁(yè)。

對(duì)于授權(quán)Blazor由于模式都有所差異。

授權(quán)文檔:ASP.NET Core Blazor Hybrid 身份驗(yàn)證和授權(quán)

結(jié)尾

來(lái)著token的分享

Blazor交流群:452761192文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-465803.html

到了這里,關(guān)于Blazor HyBrid 授權(quán)講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • bh003- Blazor hybrid / Maui 使用藍(lán)牙BLE快速教程

    bh003- Blazor hybrid / Maui 使用藍(lán)牙BLE快速教程

    源碼 https://github.com/densen2014/BlazorHybrid/tree/master/bh100days/bh003_ble?WT.mc_id=DT-MVP-5005078 BlazorHybrid.Maui.Permissions 因?yàn)樵创a比較長(zhǎng),主要是一些檢查和申請(qǐng)權(quán)限,BLE權(quán)限相關(guān)代碼,就不占用篇幅列出,感興趣的同學(xué)直接打開(kāi)源碼參考 順便打開(kāi)可空 Nullableenable/Nullable 安卓 AndroidManifest.xml iOS I

    2024年02月11日
    瀏覽(22)
  • 在Winform中一分鐘入門(mén)使用好看性能還好的Blazor Hybrid

    在Winform中一分鐘入門(mén)使用好看性能還好的Blazor Hybrid

    創(chuàng)建完成打開(kāi)項(xiàng)目文件 WinformDesktop.csproj 文件 打開(kāi)以后的項(xiàng)目文件,啟動(dòng)項(xiàng)目 這是提供的簡(jiǎn)單的項(xiàng)目Demo 我們只需要使用masa Blazor提供的模板,一分鐘入門(mén)使用,你要做的只需要去Masa Blazor組件庫(kù)去CV代碼, 并且Masa Blazor也提供了Blazor在線編輯器去體驗(yàn)Masa Blazor的組件 MASA Try

    2024年02月05日
    瀏覽(35)
  • Blazor WebAssembly 自定義用戶登錄進(jìn)行授權(quán)

    主要是前面四步,第五步是需要授權(quán)驗(yàn)證畫(huà)面的書(shū)寫(xiě)參數(shù)。 1. 引用?Microsoft.AspNetCore.Components.Authorization 2. Program.cs 加入: ? ? ? ? ? ? var builder = WebAssemblyHostBuilder.CreateDefault(args); ? ? ? ? ? ? builder.Services.AddAuthorizationCore();//There is no registered service of type \\\'Microsoft.AspNetCore.Aut

    2024年04月28日
    瀏覽(20)
  • Blazor OIDC 單點(diǎn)登錄授權(quán)實(shí)例5 - 獨(dú)立SSR App (net8 webapp ) 端授權(quán)

    Blazor OIDC 單點(diǎn)登錄授權(quán)實(shí)例5 - 獨(dú)立SSR App (net8 webapp ) 端授權(quán)

    目錄: OpenID 與 OAuth2 基礎(chǔ)知識(shí) Blazor wasm Google 登錄 Blazor wasm Gitee 碼云登錄 Blazor OIDC 單點(diǎn)登錄授權(quán)實(shí)例1-建立和配置IDS身份驗(yàn)證服務(wù) Blazor OIDC 單點(diǎn)登錄授權(quán)實(shí)例2-登錄信息組件wasm Blazor OIDC 單點(diǎn)登錄授權(quán)實(shí)例3-服務(wù)端管理組件 Blazor OIDC 單點(diǎn)登錄授權(quán)實(shí)例4 - 部署服務(wù)端/獨(dú)立WASM端授

    2024年02月19日
    瀏覽(35)
  • Blazor入門(mén)100天 : 身份驗(yàn)證和授權(quán) (1) - 建立帶身份驗(yàn)證工程

    Blazor入門(mén)100天 : 身份驗(yàn)證和授權(quán) (1) - 建立帶身份驗(yàn)證工程

    目錄 建立默認(rèn)帶身份驗(yàn)證 Blazor 程序 角色/組件/特性/過(guò)程邏輯 DB 改 Sqlite 將自定義字段添加到用戶表 腳手架拉取IDS文件,本地化資源 freesql 生成實(shí)體類(lèi),freesql 管理ids數(shù)據(jù)表 初始化 Roles,freesql 外鍵 = 導(dǎo)航屬性 完善 freesql 和 bb 特性 知識(shí)點(diǎn) Microsoft.AspNetCore.Identity EntityFramework Sql

    2024年02月05日
    瀏覽(26)
  • Vlan(Access、Trunk、Hybrid)與ARP(免費(fèi)ARP)講解

    Vlan(Access、Trunk、Hybrid)與ARP(免費(fèi)ARP)講解

    目錄 普通ARP與免費(fèi)ARP ARP的基本概念 ARP緩存表 普通ARP報(bào)文講解 免費(fèi)ARP報(bào)文講解 ARP代理講解 ARP代理類(lèi)型 路由式ARP案例分析 場(chǎng)景介紹 路由器沒(méi)有開(kāi)啟ARP代理的情況(PC9無(wú)法與PC10通信) 路由器開(kāi)啟ARP代理的情況(PC9與PC10可以通信) ARP攻擊 ARP欺騙攻擊? ARP泛洪攻擊 ARP中間人攻

    2024年02月11日
    瀏覽(43)
  • 微信小程序三種授權(quán)登錄以及授權(quán)登錄流程講解

    微信小程序三種授權(quán)登錄以及授權(quán)登錄流程講解

    ????歡迎來(lái)到我的CSDN主頁(yè)!???? ??我是Java方文山,一個(gè)在CSDN分享筆記的博主。???? ??推薦給大家我的專欄《 微信小程序開(kāi)發(fā)實(shí)戰(zhàn) 》。???? ??點(diǎn)擊這里,就可以查看我的主頁(yè)啦!???? Java方文山的個(gè)人主頁(yè) ??如果感覺(jué)還不錯(cuò)的話請(qǐng)給我點(diǎn)贊吧!???? ??期待你

    2024年02月08日
    瀏覽(19)
  • 微信小程序之微信授權(quán)登入及授權(quán)的流程講解

    微信小程序之微信授權(quán)登入及授權(quán)的流程講解

    目錄 一、流程講解 1. 圖解 2. 講解 二、官方登入 wxLogin wx.getUserProfile 代碼 三、數(shù)據(jù)交互授權(quán)登入 1. 前端 2. 后端代碼 這張圖片是關(guān)于微信小程序授權(quán)登錄的流程圖。流程圖展示了使用微信官方提供的登錄能力來(lái)獲取用戶身份標(biāo)識(shí)的過(guò)程。下面是對(duì)流程圖中的一些關(guān)鍵步驟的

    2024年02月05日
    瀏覽(21)
  • 【微信小程序】實(shí)現(xiàn)授權(quán)登入---超詳細(xì)講解

    【微信小程序】實(shí)現(xiàn)授權(quán)登入---超詳細(xì)講解

    ? ?????????微信授權(quán)登錄是指在使用某些第三方網(wǎng)站或應(yīng)用時(shí),用戶可以選擇使用自己的微信賬號(hào)進(jìn)行登錄和驗(yàn)證身份。通過(guò)微信授權(quán)登錄,用戶可以免去繁瑣的注冊(cè)流程,只需點(diǎn)擊授權(quán)按鈕,即可使用自己的微信賬號(hào)進(jìn)行登錄。當(dāng)用戶選擇使用微信授權(quán)登錄時(shí),他們會(huì)

    2024年02月05日
    瀏覽(22)
  • OAuth2.0 四種授權(quán)方式講解

    OAuth2.0 四種授權(quán)方式講解

    ????????OAuth2是一個(gè)開(kāi)放的授權(quán)標(biāo)準(zhǔn),允許第三方應(yīng)用程序以安全可控的方式訪問(wèn)受保護(hù)的資源,而無(wú)需用戶將用戶名和密碼信息與第三方應(yīng)用程序共享。OAuth2被廣泛應(yīng)用于現(xiàn)代Web和移動(dòng)應(yīng)用程序開(kāi)發(fā)中,可以簡(jiǎn)化應(yīng)用程序與資源服務(wù)器之間的授權(quán)過(guò)程,提高應(yīng)用程序的安

    2024年01月19日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包