如何向身份服务器本身发出访问令牌?
这可能是一个愚蠢的问题,但在这里:)
我在这个问题上有以下应用程序:
我想要做的是从IdentityServer调用WebApi上的安全服务,但为了做到这一点,我需要一个访问令牌。
我如何在IdentityServer中向自己发出访问令牌(按顺序将通过WebApi自身进行身份validation)
IdentityServer包含一个OWIN扩展方法,允许直接发出令牌 – 无需通过其中一个协议流。
它被称为IssueClientToken
,在此处记录:
https://identityserver.github.io/Documentation/docsv2/advanced/owin.html
我有相同或非常相似的要求。 在我的例子中,用户请求令牌并使用外部IdP进行身份validation(这是使用authcode流)。 在用户身份validation过程之后,我需要IdentityServer联系安全的WebApi – 这样做IdentityServer需要一个令牌(使用Client Credentials流)
我当前的解决方案(但我仍在测试)是在自定义用户服务上的AutenticateExternalAsync内进行调用。 在这里,我使用TokenClient.RequestClientCredentialsAsync进行调用。 显然,客户端需要为IdentityServer本身进行设置。
早期迹象表明,这在开发环境中的预期效果如此。
我按照@Andy的建议,它对我有用:)在这里发布我的代码供其他人查看。 以下代码在自定义用户服务中实现。
上述就是C#学习教程:如何向身份服务器本身发出访问令牌?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public override Task AuthenticateLocalAsync(LocalAuthenticationContext context) { var user = GetUsersAsync().SingleOrDefault(x => x.Username == context.UserName && x.Password == context.Password); if (user != null) { context.AuthenticateResult = new AuthenticateResult(user.Subject, user.Username); } return Task.FromResult(0); } private static List GetUsersAsync() { var response = GetTokenAsync(); var result = CallUserApi(response.Result.AccessToken).Result; var users = JsonConvert.DeserializeObject>(result); return users; } private static Task CallUserApi(string token) { var client = new HttpClient(); client.SetBearerToken(token); var json = client.GetStringAsync($"https://your.apiAdress.here/"); return json; } private static Task GetTokenAsync() { var client = new TokenClient( "https://identityserver.adress.here/identity/connect/token", "clientId", "secret"); return client.RequestClientCredentialsAsync("apiScope"); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1016843.html