Azure active directory Can';t在AzureB2C示例中与WebAPI通信

Azure active directory Can';t在AzureB2C示例中与WebAPI通信,azure-active-directory,azure-ad-b2c,Azure Active Directory,Azure Ad B2c,我将按照教程尝试设置一个web应用程序+web api项目 从我的WebApp-我可以注册+登录,但当我尝试与我的WebAPI通信时-我会收到401 此外-代码表示使用result.AccessToken但是我的为空,但是result.IdToken有一个值 AuthenticationResult的值: { “AccessToken”:空, “唯一标识”:“2330f777-f482-4e1d-860d-9bf93efb6d6a”, “到期日”:“1970-01-01T00:00:00+00:

我将按照教程尝试设置一个web应用程序+web api项目

从我的WebApp-我可以注册+登录,但当我尝试与我的WebAPI通信时-我会收到401

此外-代码表示使用
result.AccessToken
但是我的为空,但是
result.IdToken
有一个值

AuthenticationResult的值:

{
“AccessToken”:空,
“唯一标识”:“2330f777-f482-4e1d-860d-9bf93efb6d6a”,
“到期日”:“1970-01-01T00:00:00+00:00”,
“租户ID”:空,
“用户”:{
“DisplayableId”:空,
“名称”:空,
“IdentityProvider”:https://login.microsoftonline.com/930e788f-7b2a-47b1-b880-2370750dd255/v2.0/",
“标识符”:“123456789zctZjQ4Mi00ZTFkLTg2MGQtOWJmOTNlZmI2ZDZhLWIyY18xX3NpdXBpbg.OTMwZTc4OGYtN123456789IxLWI4ODAtMjM3MDc1MGRkMjU1”
},
“IdToken”:"123456789IjkvTdTdZrRrWqNdHtmSifq.123456789JE1JG0NtyotusimiIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIzIMQYZMVHODBLLINMC5LtFHMJA5ZWY5ZJQ1MIIm2JQWNDK0NZU2NJM3NDIlK9XUTBOEKUZJJJNd16QWVn0WVn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0Wn0WnzWnzzzWn0Wn0Wn0Wn0Wn2WnzzzWnzWnzWnzWnzWnzzMnzz2.北京市社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区社区OTGKA4OKT4LGX_JMsLaqcfyOLI9wPPJipdkuLi_yN5QeLXMcp3w2E_beuJSDDRZLYBF7YXWLKVQYVC_0l5A”,
“范围”:[
"https://MyTenant.onmicrosoft.com/demoapiread"
]
}
TaskWebApp:

公共异步任务索引()
{
尝试
{
var scope=新字符串[]{Startup.readtaskscope};
字符串signedInUserID=ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
TokenCache userTokenCache=新的MSALSessionCache(SignedUserId,this.HttpContext).GetMsalCacheInstance();
机密ClientApplication cca=新的机密ClientApplication(Startup.ClientId、Startup.Authority、Startup.RedirectUri、新的ClientCredential(Startup.ClientSecret)、userTokenCache、null);
var user=cca.Users.FirstOrDefault();
if(user==null)
{
抛出新异常(“用户为空。请清除您的Cookie并重试。特别是删除“login.microsoftonline.com”的Cookie。有关更多详细信息,请参阅此GitHub问题:https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi/issues/9");
}
AuthenticationResult=await cca.AcquireTokenSilentAsync(范围、用户、启动、权限、false);
HttpClient=新的HttpClient();
HttpRequestMessage请求=新的HttpRequestMessage(HttpMethod.Get,apidendpoint);
//TODO:访问令牌为空
//request.Headers.Authorization=新的AuthenticationHeaderValue(“承载者”,result.AccessToken);
request.Headers.Authorization=新的AuthenticationHeaderValue(“承载者”,result.IdToken);
HttpResponseMessage response=等待客户端.SendAsync(请求);
//这里是401
开关(响应状态代码)
{
案例HttpStatusCode.OK:
String responseString=wait response.Content.ReadAsStringAsync();
JArray tasks=JArray.Parse(responseString);
ViewBag.Tasks=任务;
返回视图();
案例HttpStatusCode。未经授权:
返回ErrorAction(“请重新登录。”+response.ReasonPhrase);
违约:
返回ErrorAction(“Error.Status code=“+response.StatusCode”);
}
}
捕获(例外情况除外)
{
返回ErrorAction(“读取待办事项列表时出错:“+ex.Message”);
}
}
TaskWebApp Web.config

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />

    <add key="ida:Tenant" value="MyTenant.onmicrosoft.com" />
    <add key="ida:ClientId" value="<my-web-app-client-id>" />
    <add key="ida:ClientSecret" value="<my-web-app-client-secret>" />
    <add key="ida:AadInstance" value="https://login.microsoftonline.com/tfp/{0}/{1}/v2.0/.well-known/openid-configuration" />
    <add key="ida:RedirectUri" value="https://localhost:44316/" />
    <add key="ida:SignUpSignInPolicyId" value="b2c_1_SiUpIn" />

    <add key="ida:EditProfilePolicyId" value="b2c_1_edit_profile" />
    <add key="ida:ResetPasswordPolicyId" value="b2c_1_reset" />
    <add key="api:TaskServiceUrl" value="https://localhost:44332" />

    <!-- The following settings is used for requesting access tokens -->
    <add key="api:ApiIdentifier" value="https://MyTenant.onmicrosoft.com/demoapi" />
    <add key="api:ReadScope" value="read" />
    <add key="api:WriteScope" value="write" />
</appSettings>

我的错误是在我的
API标识符中缺少
/

<appSettings>
    value="https://MyTenant.onmicrosoft.com/demoapi" />
</appSettings>

值=”https://MyTenant.onmicrosoft.com/demoapi" />
应该是:

<appSettings>
    value="https://MyTenant.onmicrosoft.com/demoapi/" />
</appSettings>

值=”https://MyTenant.onmicrosoft.com/demoapi/" />