我有一个只有一页的 blazor 服务器应用程序
@page "/"
<AuthorizeView Roles="sample_role">
You see this because you have the sample_role
</AuthorizeView>
<p>Everyone sees this</p>
由于
sample_role
不存在于任何默认 Active Directory 中,因此我编写了一个自定义身份验证提供程序来根据现有用户的数据库注入该角色。
public class CustomAuth : ServerAutheticationProvider
{
public override async Task<AuthenticationState> GetAuthenticationStateAsync()
{
var state = await base.GetAuthenticationStateAsync();
var currentUserId = state.User.Identity.Name;
// now I fetch permissions for this user from a database
bool userHasRole = Database.DoesRoleExistFor(currentUserId);
if(userHasRole) {
var sample_role = new Claim(ClaimTypes.Role, "sample_role");
var identity = new ClaimsIdentity(new Claim[] { sample_role });
state.User.AddIdentity(identity);
NotifyAuthenticationStateChanged(Task.From(new AutheticationState(state.User)));
}
return state;
}
}
我将此类配置为默认的
AuthenticationStateProvider
中 Startup.cs
services.AddScoped<AuthenticationStateProvider, CustomAuth>();
以上所有内容都适用于我的开发计算机,其中我的计算机已加入域。
currentUserId
的值类似于 DOMAIN\USERNAME
。
此代码也适用于我的个人计算机,该计算机不属于任何域。在这种情况下,
currentUserId
的值为 COMPUTERNAME\USERNAME
。
但是,当我将代码移动到生产环境并使用不同的域名时,出现异常:
Win32Exception:主域和受信任域之间的信任关系失败。
当我改变线路时:
<AuthorizeView Roles="sample_role">
至
<AuthorizeView>
代码有效,但我无法决定谁可以看到什么。
如何解决这个问题?