我有一个VueJS前端和一个Asp.Net核心后端。
用户通过前端的VueJS MSAL库进行身份验证,并将结果的承载令牌与每个请求一起提供给后端。我还获得ID令牌和ID令牌声明。
在后端,对令牌进行验证,并检查范围。
范围检查:
static readonly string[] scopeRequiredByApi = new string[] { "access_as_user" };
internal void VerifyAccessAllowed()
{
HttpContext.VerifyUserHasAnyAcceptedScope(scopeRequiredByApi);
}令牌验证:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApi(builder.Configuration);
builder.Services.AddAuthorization();
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();现在,我创建了"App“,并分配给了用户。作为ID令牌声明,我获得了应用程序角色。
现在,我希望根据用户被分配给的角色给出与后端不同的结果。主要是列表的子集。"CEO“看到完整的列表,而"PM”只看到指定的子集。
现在看来,我无法访问后端的ID令牌声明。我只需在头中发送ID令牌,并尝试手动解码它,但这对我来说似乎很奇怪,因为其他东西几乎都是自动工作的。
我认为必须有一个干净而简单的方法来做到这一点,因为这种情况并不少见。
对我来说,有两种可能的选择:
这其中是否有任何一种可能,或者有另一种很好的方法来做到这一点。
我希望我提供了所有必要的信息,如果没有,我会提供:)
提前谢谢,保罗!
发布于 2022-07-16 12:40:40
我会回答这个问题,以防别人提出类似的问题。
我采用的方法的问题是,我试图通过两个应用程序注册来验证前端和后端。前端注册提供的访问令牌对于后端注册(通过API权限)也是有效的。通过删除前端注册并通过后端注册直接请求访问,后端从之前没有的令牌获得了对角色的访问权。(我读到了一些有关这方面的内容,这似乎与范围有关,而且这些角色是为前端注册而创建的。)
现在,通过我的解决方案,我只使用一个应用程序注册。这也会导致前端无法通过Azure Portal得到保护,这是我手动完成的。
我不确定这是否是最优的解决方案,但它适用于我的用例。
https://stackoverflow.com/questions/72992748
复制相似问题