gpt4 book ai didi

c# - 是否可以从 WebAPI 2 中的 authToken (RequestContext) 访问 clientId

转载 作者:行者123 更新时间:2023-11-30 20:17:14 25 4
gpt4 key购买 nike

我已经使用我的 WebAPI 2 应用程序实现了 Oauth,并且有多个应用程序访问该 API。一旦通过身份验证,在通过身份验证 token 发送请求后,我可以按如下方式访问用户:

var currentUser = RequestContext.Principal;

登录时,clientId设置如下:

context.OwinContext.Set<AppClient>("oauth:client", client);

有没有办法访问该客户端 ID?我想将某些操作/ Controller 限制为某些客户端。有没有办法做到这一点?

我试过如下获取客户端:

var client = Request.GetOwinContext().Get<string>("oauth:client");

但这行不通。

最佳答案

登录时,您可以在 GrantResourceOwnerCredentials 中设置身份声明

identity.AddClaim(new Claim("oauth:client", client));

这样,一旦设置了用户主体的身份,它就可用。

你可以创建一个扩展方法来方便地提取它

public static class GenericIdentityExtensions {
const string ClientIdentifier = "oauth:client";

/// <summary>
/// Set the client id claim
/// </summary>
/// <param name="identity"></param>
/// <returns></returns>
public static bool SetClientId(this IIdentity identity, string clientId) {
if (identity != null) {
var claimsIdentity = identity as ClaimsIdentity;
if (claimsIdentity != null) {
claimsIdentity.AddClaim(new Claim(ClientIdentifier, clientId));
return true;
}
}
return false;
}

/// <summary>
/// Return the client id claim
/// </summary>
/// <param name="identity"></param>
/// <returns></returns>
public static string GetClientId(this IIdentity identity) {
if (identity != null) {
var claimsIdentity = identity as ClaimsIdentity;
if (claimsIdentity != null) {
return claimsIdentity.FindFirstOrEmpty(ClientIdentifier);
}
}
return string.Empty;
}
/// <summary>
/// Retrieves the first claim that is matched by the specified type if it exists, String.Empty otherwise.
/// </summary>
public static string FindFirstOrEmpty(this ClaimsIdentity identity, string claimType) {
var claim = identity.FindFirst(claimType);
return claim == null ? string.Empty : claim.Value;
}
}

所以现在一旦您有了用户主体,您就可以从声明中提取客户端 ID。

var currentUser = RequestContext.Principal;
var client = currentUser.Identity.GetClientId();

关于c# - 是否可以从 WebAPI 2 中的 authToken (RequestContext) 访问 clientId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45612805/

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