te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>c# - .NET Core : Calling DownstreamApi.CallApiForUserAsync with non-default authentication scheme - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

c# - .NET Core : Calling DownstreamApi.CallApiForUserAsync with non-default authentication scheme - Stack Overflow

programmeradmin5浏览0评论

I am adding Entra ID authentication to an existing ASP.NET Core web app and Web API with standard identity authentication.

Authentication is working. Calling a method on my API using DownstreamApi.CallApiForUserAsync is also working, but only if I set OpenId Connect as the default auth scheme.

When it is not the default auth scheme, then I get an error

Cannot determine the cloud Instance. The provided authentication scheme was ''. Microsoft.Identity.Web inferred 'Identity.Application' as the authentication scheme.

How do I specify the authentication scheme?

Relevant code (with variable and method names changed) - Startup:

builder.Services.AddAuthentication(/*OpenIdConnectDefaults.AuthenticationScheme*/)      
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi(         
        builder.Configuration.GetSection("X:Scopes").Get<string[]>()
    )
    .AddInMemoryTokenCaches()
    .AddDownstreamApi("X", builder.Configuration.GetSection("X"));

Controller method calling API:

[Authorize(AuthenticationSchemes = OpenIdConnectDefaults.AuthenticationScheme)]
[AuthorizeForScopes(ScopeKeySection = "X:Scopes")]
public async Task<string> GetSomething()
{
    HttpResponseMessage response = await _downstreamApi.CallApiForUserAsync("X", options =>
    {
        options.RelativePath = "path/Something";
    }); 
    ...
}

If the parameter is provided in the call to AddAuthentication, it works, if not, I get the error mentioned above.

I am adding Entra ID authentication to an existing ASP.NET Core web app and Web API with standard identity authentication.

Authentication is working. Calling a method on my API using DownstreamApi.CallApiForUserAsync is also working, but only if I set OpenId Connect as the default auth scheme.

When it is not the default auth scheme, then I get an error

Cannot determine the cloud Instance. The provided authentication scheme was ''. Microsoft.Identity.Web inferred 'Identity.Application' as the authentication scheme.

How do I specify the authentication scheme?

Relevant code (with variable and method names changed) - Startup:

builder.Services.AddAuthentication(/*OpenIdConnectDefaults.AuthenticationScheme*/)      
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi(         
        builder.Configuration.GetSection("X:Scopes").Get<string[]>()
    )
    .AddInMemoryTokenCaches()
    .AddDownstreamApi("X", builder.Configuration.GetSection("X"));

Controller method calling API:

[Authorize(AuthenticationSchemes = OpenIdConnectDefaults.AuthenticationScheme)]
[AuthorizeForScopes(ScopeKeySection = "X:Scopes")]
public async Task<string> GetSomething()
{
    HttpResponseMessage response = await _downstreamApi.CallApiForUserAsync("X", options =>
    {
        options.RelativePath = "path/Something";
    }); 
    ...
}

If the parameter is provided in the call to AddAuthentication, it works, if not, I get the error mentioned above.

Share Improve this question edited Feb 17 at 16:51 marc_s 755k184 gold badges1.4k silver badges1.5k bronze badges asked Feb 17 at 16:16 GregGreg 32 bronze badges New contributor Greg is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct. 2
  • What does your appsettings.json look like? – Conrad Lotz Commented Feb 17 at 17:00
  • The Microsoft.Identity.Web package is a Microsoft specific client built on top on the ASP.NET Core OpenID Connect client with some changes to the default client. Microsoft Entra ID is an implementation of OpenId Connect. Please see this link for more info on this package: learn.microsoft/en-us/aspnet/core/security/authentication/…. – SoftwareDveloper Commented Feb 17 at 19:14
Add a comment  | 

1 Answer 1

Reset to default 0

You could read this document for Microsoft.Identity.Web it requires OpenIdConnectDefaults.AuthenticationScheme as parameter

services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)

If you want to specify the authentication scheme,you may try:

services.AddAuthentication("MyAuthenticationScheme")
              .AddMicrosoftIdentityWebApp(Configuration, 
                 openIdConnectAuthenticationScheme: "MyAuthenticationScheme");
发布评论

评论列表(0)

  1. 暂无评论