登录成功,但不返回 webAuthenticationResult 的值.请如何修复它

本文关键字:的值 何修复 webAuthenticationResult 返回 成功 登录 | 更新日期: 2023-09-27 18:28:32

WebAuthenticationResult webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, new Uri(DropboxUrl), new Uri(callback_url));
if(webAuthenticationResult.ResponseStatus==WebAuthenticationStatus.Success)
   {
      GetAccessToken(webAuthenticationResult.ResponseData);
   }

没有错误(登录成功(,但它没有返回到(它在WebAuthenticationResults停止 webAuthenticationResult= await(

webAuthenticationResult.ResponseStatus==WebAuthenticationStatus.Success

我不明白。几个月前,我已经正常使用它了。

更新

{
            try
            {
                var SpotifyUrl = "https://api.vimeo.com/oauth/authorize?client_id=" + Uri.EscapeDataString(clientId) + "&response_type=code&redirect_uri=" + Uri.EscapeDataString("https://example/callback") + "&state=xyzbc&show_dialog=true";
                var StartUri = new Uri(SpotifyUrl);
                var EndUri = new Uri("https://example/callback");
                WebAuthenticationResult WebAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(
                                                        WebAuthenticationOptions.None,
                                                        StartUri,
                                                        EndUri);
                if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success)
                {
                    var responseData = WebAuthenticationResult.ResponseData;
                    await GetSpotifyUserNameAsync(WebAuthenticationResult.ResponseData.ToString());
                }
                else if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.ErrorHttp)
                {
                    throw new Exception("HTTP Error returned by AuthenticateAsync() : " + WebAuthenticationResult.ResponseErrorDetail.ToString());
                }
                else
                {
                    throw new Exception("Error returned by AuthenticateAsync() : " + WebAuthenticationResult.ResponseStatus.ToString());
                }
            }

登录成功,但不返回 webAuthenticationResult 的值.请如何修复它

请确保您的callbackUri与您在DropboxUrl中使用的重定向 URI 相同。

由于您在代码中使用DropboxUrl,因此假设您正在使用WebAuthenticationBroker来执行Dropbox授权,DropboxUrl希望这样做(请参阅 https://www.dropbox.com/developers-v1/core/docs#oa2-authorize(:

https://www.dropbox.com/1/oauth2/authorize?response_type=token&client_id=<app key>&redirect_uri=<redirect URI>

当我们要获取令牌时,需要一个重定向 URI。我们需要在应用程序控制台中设置它。重定向 URI 并不重要,因为代理永远不会导航到此 URI,而是将控制权返回给应用程序。但是,我们可以将https://www.dropbox.com/1/oauth2/redirect_receiver用作重定向 URI。它通常供客户端应用使用。

然后在WebAuthenticationBroker.AuthenticateAsync方法中,我们需要将callbackUri设置为与重定向 URI 相同。因为

指示 Web 身份验证完成的回调 URI。代理将此 URI 与其将导航到的每个 URI 进行匹配。

有关详细信息,请参阅 WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions, Uri, Uri) 方法中的回调 Uri

下面是一个简单的示例:

public async Task<string> AuthorizeWithDropbox()
{
    var appKey = "<App Key>";
    var redirectUri = new Uri("https://www.dropbox.com/1/oauth2/redirect_receiver");
    var dropboxUri = new Uri($"https://www.dropbox.com/1/oauth2/authorize?response_type=token&redirect_uri={redirectUri}&client_id={appKey}");
    var result = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, dropboxUri, redirectUri);
    if (result.ResponseStatus == WebAuthenticationStatus.Success)
    {
        return result.ResponseData;
    }
    else
    {
        return null;
    }
}

返回值将如下所示:

https://www.dropbox.com/1/oauth2/redirect_receiver#access_token=<token>&token_type=bearer&uid=<uid>