我正在进行Windows Broker身份验证。我可以成功验证调用应用程序,并可以在身份验证后返回主页。
我无法获取用户信息(用户名)。我尝试过,但收到一条消息,如下所示。
类型' System.Exception'的第一次机会异常发生在mscorlib.dll中 WinRT信息:响应状态代码不表示成功:401(未授权)。 附加信息:未经授权(401)。 响应状态代码不表示成功:401(未授权)。 如果存在此异常的处理程序,则可以安全地继续该程序。
我在下面写了我的代码。请朋友帮助我。
private const string RESOURCE_NAME ="id_token";
public async Task<UserInfo> GetName(string accessToken)
{
try
{
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new Windows.Web.Http.Headers.HttpCredentialsHeaderValue("OAuth", accessToken);
var result = await client.GetStringAsync(new Uri(loginUri));
var profileInformation =JsonObject.Parse(result).GetObject();
var name = profileInformation.GetNamedString("username");
return new UserInfo { Name = name };
}
catch (JsonException ex)
{
throw new JsonException(ex.message);
}
}
private async void btnHomeLogin_Click(object sender, RoutedEventArgs e)
{
string Scope = "openid profile";
var client = new OAuth2Client(new Uri(loginUri));
var startUri = client.CreateAuthorizeUrl(
ClientID,
RESOURCE_NAME,
Scope,
RedirectURI,
state,
nonce);
string Authresult;
try
{
var webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, new Uri(startUri),new Uri(RedirectURI));
switch (webAuthenticationResult.ResponseStatus)
{
case Windows.Security.Authentication.Web.WebAuthenticationStatus.Success:
//Successful authentication.
Authresult = webAuthenticationResult.ResponseData.ToString();
UserInfo userInfo = await GetName(RESOURCE_NAME);
break;
case Windows.Security.Authentication.Web.WebAuthenticationStatus.ErrorHttp:
//HTTP error.
Authresult = webAuthenticationResult.ResponseErrorDetail.ToString();
break;
default:
//Other error.
Authresult = webAuthenticationResult.ResponseData.ToString();
break;
}
}
catch (Exception ex)
{
//Authentication failed. Handle parameter, SSL/TLS, and Network Unavailable errors here.
Authresult = ex.Message;
}
}
答案 0 :(得分:0)
如果您正在使用上面的代码,那么基于上面的代码,您使用常量字符串(RESOURCE_NAME)调用GetName函数,而不是从webAuthenticationResult返回的实际AuthResult(accessToken)。如果调用WebAuthenticationBroker的意图是返回一个稍后应该与HttpClient一起使用的访问令牌,那么您需要相应地调整代码并在调用HttpClient代码时使用正确的访问令牌。否则,如果您没有传递正确的令牌,则401不会出现意外。