gpt4 book ai didi

c# - 如何在 Web API 身份验证服务中获取包含在我的 AuthTicket 中的声明?

转载 作者:太空狗 更新时间:2023-10-29 21:32:31 25 4
gpt4 key购买 nike

我有一个带有身份验证服务的 Web API,用于 WPF 客户端,设置如下:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
...
}
}

public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
...
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
ApplicationCanDisplayErrors = true,
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true, // TODO Make false to deploy
};
app.UseOAuthAuthorizationServer(OAuthOptions);
}
}

到目前为止,我只使用过 /Token 端点,因为它至少会授予我不记名 token 。我在身份验证成功时收到的票有签发日期和到期日期、不记名 token 和我的用户名。

我如何获得用户的声明(可能还有角色)?有什么我可以在这里做的吗,或者我是通过 API 缓慢地请求它们,在验证之后,将它们和 Auth Ticket 聚合到类似于 WPF 客户端的 Principal 对象中?

我是否可以在 WPF 应用程序中包含一些身份组件以帮助从 token 中提取声明,以及关于我应该如何执行此操作的任何建议?

最佳答案

我认为允许客户端解密 token 是相当危险的。如果他们能做到这一点,恶意行为者就可以修改 token 和其中的声明。如果您不检查声明的有效性(可能是因为它们是由第三方提供的),那么这可能会导致特权升级和您的应用程序受到损害。

如果客户端应用程序需要声明 - 也许是为了 UI 布局,那么您可以将它们单独提供给 token 。一种方法是通过 ActionFilterAttribute将声明写入自定义 http header 。如果声明在这里被篡改,它只会影响客户端,因为您将在处理任何请求之前检查 token 中的安全声明。

public AddClaimsAttribute : System.Web.Http.Filters.ActionFilterAttribute
{
var principal = actionExecutedContext.ActionContext.RequestContext.Principal as ClaimsPrincipal;

if (principal != null)
{
var claims = principal.Claims.Select(x => x.Type + ":" + x.Value).ToList();

actionExecutedContext.Response.Content.Headers.Add("Claims",
String.Join(",", claims));
}

}

然后您的客户端只需要检查这个 header 并解析它。

这是一个基本示例,您可以将其格式化为 JSON 或添加一系列自定义 header “IsAdmin”、“IsEditingUser”等。

因为它是一个过滤器,所以您可以将其全局应用于每个请求、 Controller 上的每个操作或您需要的特定操作。

关于c# - 如何在 Web API 身份验证服务中获取包含在我的 AuthTicket 中的声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40614201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com