Аутентификация MSAL.NET работает в C#, но не OpenEdge - «Ссылка на объект не установлен на экземпляр объекта».C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Аутентификация MSAL.NET работает в C#, но не OpenEdge - «Ссылка на объект не установлен на экземпляр объекта».

Сообщение Anonymous »

Итак, я сделал DLL для генерации токена аутентификации в C# (.NET Framework v4.8) с тестовым пользовательским интерфейсом, чтобы проверить, что он работает, что делает. Появляется экран входа в систему, я могу войти в систему и генерировать токен аутентификации. Тем не менее, когда я запускаю один и тот же метод в OpenEdge, я получаю «ссылку на объект, не установленную на экземпляр объекта». «Ошибка.
Я сначала подумал, что она связана с переменной FirstAccount , когда она возвращает нулевое значение при установке. Я проверил переменные, когда они запускаются в C# и в OpenEdge с USEASYNC установить как false , так и True , и они в конечном итоге одинаковы, но OpenEdge жалуются, что нулевое значение передается, а C# не. Затем я добавил в проверку, если первая переменная является нулевой, так что она пропускает учетную запись молча и переходит прямо в интерактивную, но я все еще получаю ту же ошибку даже с .withaccount (FirstAccount) . Все остальное имеет ценность и то же самое между C# и OpenEdge. Логин запускается путем вызова метода LoginSync () как в тестовом пользовательском интерфейсе, так и в OpenEdge. У кого -нибудь есть идеи относительно того, почему это делает это и как это исправить? < /P>
Метод аутентификации: < /p>
public IPublicClientApplication App {
get {
if (_app == null)
{
BuildApp();
}
return _app;
}
}

public BaseRequests Client
{
get
{
if (_client == null)
{
BuildClient();
}
return _client;
}
}

public void BuildApp()
{
_app = null;
_app = PublicClientApplicationBuilder.Create(_clientId)
.WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
.WithDefaultRedirectUri()
.Build();
}

public string BuildClient()
{
var token = GetAccessToken(true);
_client = new BaseRequests(_baseURL, token);
return token;
}

public string LoginSync()
{
BuildApp();
return BuildClient();
}

private string GetAccessToken(bool useAsync)
{
if (useAsync)
{
return Task.Run(() => GetAccessTokenAsync()).GetAwaiter().GetResult();
}
AuthenticationResult authResult = null;
IPublicClientApplication app = App;
var accounts = Task.Run(() => app.GetAccountsAsync()).GetAwaiter().GetResult();
IAccount firstAccount = accounts.FirstOrDefault();

try
{
if (firstAccount != null)
{
try
{
authResult = Task.Run(() => app.AcquireTokenSilent(_scopes, firstAccount)
.ExecuteAsync()
).GetAwaiter().GetResult();

}
catch (Exception ex)
{
return $"Error Acquiring Token Silently:{Environment.NewLine}{ex}";
}
}
else
{
try
{
authResult = Task.Run(() =>
app.AcquireTokenInteractive(_scopes)
.WithAccount(firstAccount)
.WithPrompt(Prompt.SelectAccount)
.ExecuteAsync()
).GetAwaiter().GetResult();
}
catch (MsalException msalex)
{
return $"Error Acquiring Token:{Environment.NewLine}{msalex}";
}
}
}
catch (Exception ex)
{
return $"Error Acquiring Token{Environment.NewLine}{ex}";
}
return authResult.AccessToken;
}

private async Task GetAccessTokenAsync()
{
AuthenticationResult authResult = null;
IPublicClientApplication app = App;
var accounts = await app.GetAccountsAsync();
var firstAccount = accounts.FirstOrDefault();

try
{
authResult = await app.AcquireTokenSilent(_scopes, firstAccount)
.ExecuteAsync();
}
catch (MsalUiRequiredException)
{
try
{
authResult = await app.AcquireTokenInteractive(_scopes)
.WithAccount(firstAccount)
.WithPrompt(Prompt.SelectAccount)
.ExecuteAsync();
}
catch (MsalException msalex)
{
return $"Error Acquiring Token:{Environment.NewLine}{msalex}";
}
}
catch (Exception ex)
{
return $"Error Acquiring Token Silently:{Environment.NewLine}{ex}";
}

return authResult.AccessToken;
}
< /code>
Stack Trace: < /p>
This exception was originally thrown at this call stack:
at Microsoft.Identity.Client.Platforms.Features.OpenTelemetry.OtelInstrumentation..ctor()
at Microsoft.Identity.Client.PlatformsCommon.Shared.AbstractPlatformProxy.InternalGetOtelInstrumentation()
at System.Lazy`1.CreateValue() in System\Lazy.cs:line 319
at System.Lazy`1.LazyInitValue() in System\Lazy.cs:line 273
at Microsoft.Identity.Client.Internal.Requests.RequestBase.LogFailureTelemetryToOtel(String errorCodeToLog, ApiEvent apiEvent, CacheRefreshReason cacheRefreshReason)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.d__11.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() in System.Runtime.ExceptionServices\ExceptionDispatchInfo.cs:line 72
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in System.Runtime.CompilerServices\TaskAwaiter.cs:line 88
at Microsoft.Identity.Client.ApiConfig.Executors.ClientApplicationBaseExecutor.d__2.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() in System.Runtime.ExceptionServices\ExceptionDispatchInfo.cs:line 72
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in System.Runtime.CompilerServices\TaskAwaiter.cs:line 88
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() in System.Runtime.CompilerServices\TaskAwaiter.cs:line 230
at MailServiceWrapper.MailServiceHelper.d__28.MoveNext() in ...\MailServiceWrapper\MailServiceHelper.cs:line 116


Подробнее здесь: https://stackoverflow.com/questions/795 ... ference-no
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Аутентификация MSAL.NET работает в C#, но не OpenEdge 12.8 - «Ссылка на объект не установлен на экземпляр объекта».
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Ссылка на объект не установлен на экземпляр объекта Visual Studio asp.net
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Ссылка на объект не установлен на экземпляр объекта Visual Studio asp.net
    Anonymous » » в форуме MySql
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Ссылка на объект не установлен на экземпляр объекта System.io.ports
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • C# Проблема: ссылка на объект не установлен на экземпляр объекта
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»