我们正在使用身份服务器为我们的Web服务生成令牌。我们也加了招摇。但是我们面临的问题是要执行API测试自动化,我们需要使用代码片段来访问令牌。有没有一种通过使用我们用来访问swagger的用户名和密码来自动获取访问令牌的方法?如何通过传递用户名和密码从Identity Server获取访问令牌?
1
A
回答
1
我解决这个问题的方法是添加一个客户端凭证客户端,如果存在已配置的测试客户端密钥,我只在测试环境中配置此密钥,但明显不在较高的环境中,意味着客户端永远不会被添加到那里。 。
所以,无论是在你的AppSettings {} appropriate_environment或.settings通过设置客户端密钥,然后在IdentityServer配置环境变量,您可以添加:
//attempt to get the test client secret
var testClientSecret = configuration["TestClientSecret"];
if (!String.IsNullOrWhiteSpace(testClientSecret))
{
clients.Add(new Client
{
ClientId = "MyTestClient",
AllowedGrantTypes = GrantTypes.ClientCredentials,
ClientSecrets =
{
new Secret(testClientSecret.Sha256())
},
AllowedScopes = { "MyApiScope", "MyOtherApiScope", "etc." }
});
};
然后,我有一个测试的邮差集合其中第一POST到:
https://{{idp_base_url}}/connect/token
使用基本认证与测试客户端名称的用户名和密码作为客户端秘密(其中{{idp_base_url}}是包含IdentityServer主机适合于环境邮递员环境变量)。
然后我跑了几个测试,但还访问令牌存储到API:
//tests...
var tokenData = JSON.parse(responseBody);
//more tests...
postman.setEnvironmentVariable("cc_token", tokenData.access_token);
集合在随后的测试,那么可以使用此令牌使用上述承载令牌身份验证头运行的API测试邮差环境变量:
所有的
0
首先声明一个名为Token类。
public class Token
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
[JsonProperty("token_type")]
public string TokenType { get; set; }
[JsonProperty("expires_in")]
public int ExpiresIn { get; set; }
[JsonProperty("userName")]
public string Username { get; set; }
[JsonProperty(".issued")]
public string IssuedAt { get; set; }
[JsonProperty(".expires")]
public string ExpiresAt { get; set; }
}
在Postman中,我们在POST方法中使用username,password和grant_type来从baseURl/token uri生成access_token。要知道您应该使用哪个网址,请检查App_Start文件夹中的Startup.Auth.cs文件。
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
.....
}
适当的URL由PathString()构造函数内的字符串决定。
一旦知道要调用哪个url,现在要获取访问令牌,请考虑以下代码。
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("username", username),
new KeyValuePair<string, string>("password",password),
new KeyValuePair<string, string>("grant_type", "password")
};
var request = new HttpRequestMessage(HttpMethod.Post, "baseUrl/Token");
request.Content = new FormUrlEncodedContent(keyValues);
var client = new HttpClient();
var response = await client.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();
var accessTokenVar = JsonConvert.DeserializeObject<AuthenticationToken>(content);
现在可以使用accessTokenVar访问访问令牌。
相关问题
- 1. 我可以通过传递用户名和密码来获得任何Twitter访问者的访问令牌
- 2. 如何使用用户名/密码获取Facebook访问令牌
- 3. WebAPI获取访问令牌没有用户名和密码
- 4. 获取用户名和访问令牌
- 5. Identity Server和访问令牌声明
- 6. 从谷歌用户名/密码获取谷歌ID和访问令牌
- 7. 如何使用用户名和密码获取github令牌
- 8. 如何在ASP.NET 5 Identity中检索用户的访问令牌和密码?
- 9. 从aws中获取访问令牌,秘密访问密钥和会话令牌
- 10. 如何使用密码和用户名来获得访问令牌?
- 11. 如何通过角度传递用户名和密码与API?
- 12. Facebook获取访问令牌
- 13. WSO2 Identity Server:apis通过SAML令牌获取用户信息?
- 14. Facebook API访问令牌 - 当我知道用户名和密码
- 15. 通过Paw获取访问令牌
- 16. ADAL4j java - 使用带有用户名和密码的刷新令牌获取访问令牌
- 17. 如何通过OAuth2从vKontakte(VK)获取访问令牌?
- 18. 获取用户访问令牌facebook访问令牌节点
- 19. 如何通过REST呼叫安全地传递用户名和密码?
- 20. 如何获得过期Facebook用户访问令牌的通知
- 21. 如何通过javascript与IdentityServer3传递我的访问令牌?
- 22. Facebook - 通过Cronjob获取用户访问令牌
- 23. 如何从linkedIn获取访问令牌
- 24. 如何从Foursquare获取访问令牌?
- 25. 获取Instagram访问令牌
- 26. 从python获取没有访问令牌的facebook用户名
- 27. Identity Server 3使用角码获取令牌的隐式流程
- 28. 通过IFrame传递用户名和密码
- 29. 从LTPA令牌获取用于Filenet-P8 CE连接的用户名和密码
- 30. 使用访问令牌而不是用户名和密码登录帐户?