如何解决Keycloak - WPF 检查权限
我有一个 WPF 应用程序(.net 462 和 API .net5.0)。
我已经在 api 和这项工作上设置了 openid,权限工作,但在 WPF 应用程序上,我必须检查应用程序元素的权限(菜单访问、按钮访问)。
获取令牌工作,但我不知道如何在 openid 时验证范围
关键时钟配置:
- Realm => 演示测试
- 客户端 => 演示测试客户端
- 客户角色 => DemoRole
- 授权范围 => demo:read
- 相关权限 => 权限演示:阅读
- 角色相关政策 => DemoRole - 正面
我创建了两个用户“user-test-ok”和“user-test-ko”,“user-test-ok”具有客户端角色“DemoRole”。
我对用户进行了自省测试,以验证用户是否具有“demo:read”范围,但这不起作用。
我不想使用 keycloak API,我想使用 openid 系统,以便其他 OAuth2.0 系统可能更改 keycloak。
这是我尝试检查授权范围的代码:
var requestUri = new Uri($"https://localhost:8443/auth/realms/{realm}/protocol/openid-connect/token/introspect");
using (var client = new HttpClient())
{
var req = new HttpRequestMessage(HttpMethod.Post,requestUri);
req.Headers.Add("cache-control","no-cache");
req.Headers.Add("accept","application/x-www-form-urlencoded");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer",accesstoken);
req.Content = new FormUrlEncodedContent(new Dictionary<string,string>
{
{ "token_type_hint","requesting_party_token" },{ "token",tokenResult.Accesstoken },{ "client_id",clientId },{ "client_secret",clientSecret },{ "scope","test:read" },});
var response = client.SendAsync(req).Result;
if (!response.IsSuccessstatusCode)
{
throw new Exception();
}
var responseString = response.Content.ReadAsstringAsync().Result;
}
你知道怎么做吗?
解决方法
如果我阅读了令牌自省端点文档 here,那么它没有说明将范围 ({ "scope","test:read" },) 作为参数传递。相反,您从该请求中获取返回的信息,然后首先检查主动声明是否为真。这表明令牌仍然有效且有效..
然后您只需检查返回的数据。或者,您只需使用访问权限或 ID 令牌中的范围值来授予用户对应用程序中功能的访问权限。
请检查请求在 Fiddler 之类的工具中返回的内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。