我必须执行Auth0身份验证过程并提取令牌。
我有 Authenticator 类别,如下所示-
class Auth0Authenticator
{
public Auth0Authenticator() { performAuthentication(); }
public void performAuthentication()
{
Auth0Client auth0Client = new Auth0Client(new Auth0ClientOptions()
{
Domain = "mydomain",
ClientId = "clientid",
});
var extraParameters = new Dictionary<string, string>();
extraParameters.Add("connection", "parameter");
var result = auth0Client.LoginAsync(extraParameters: extraParameters);
}
}
在执行 LoginAsync 时出现错误-调用线程必须是STA,因为许多UI组件都需要STA。
即使在创建STA线程或添加属性[STAThread]后也无济于事。
当我在一个基于对话框的简单应用程序中执行相同的代码时,代码成功地向我返回了令牌。但是将相同的代码放入我的项目中(由MFC / C#/ CLI组成)会引发错误。
有人可以帮忙吗?
答案 0 :(得分:1)
这可能是XY problem。 Auth0Client.LoginAsync
是一个异步API,您正在尝试在类的构造函数中调用它。如果在执行功能之前有一些代码依赖于该功能,则可能会产生负面影响。
重构代码以遵循建议的语法
public class Auth0Authenticator {
public Auth0Authenticator() {
//Subscribe to the event
autoAuthenticate += onAutoAuthenticating();
//raise event to allow async operation.
autoAuthenticate(this, EventArgs.Empty);
}
private event EventHandler autoAuthenticate = delegate { };
private async void onAutoAuthenticating(object sender, EventArgs args) {
await PerformAuthenticationAsync();
}
public async Task PerformAuthenticationAsync() {
Auth0Client auth0Client = new Auth0Client(new Auth0ClientOptions() {
Domain = "mydomain",
ClientId = "clientid",
});
var extraParameters = new Dictionary<string, string>();
extraParameters.Add("connection", "parameter");
var result = await auth0Client.LoginAsync(extraParameters: extraParameters);
//...do something with the result as needed
string access_token = result.AccessToken;
string refresh_token = result.RefreshToken;
//...
}
}