我正在尝试使用此示例创建一个简单的 Azure AD 身份验证示例,但我的客户端是 JQuery。我不知道为什么当令牌显示观众是https://myportal.onmicrosoft.com/test_core_web_api_spa. 这与 Azure 中的 API 定义相匹配。唯一缺少的部分是自定义范围,user_impersonation但是当我使用 MSALclientApplication.acquireTokenSilent(tokenRequest2)进行调用以获取令牌时,我的范围与具有范围的 API 的完整 URL 匹配:
const tokenRequest2 = {
scopes: ["https://myportal.onmicrosoft.com/test_core_web_api_spa/user_impersonation"]
};
Run Code Online (Sandbox Code Playgroud)
在建立身份验证的 API 中,我正在使用此代码(我注意到使用此方法的示例并不多)
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
Run Code Online (Sandbox Code Playgroud)
API的配置是
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "myportal.onmicrosoft.com",
"TenantId": "my-tenant-guid",
"ClientId": "my-api-client-guid"
},
Run Code Online (Sandbox Code Playgroud)
我注意到许多示例显示了不同的 API 格式(我假设这些是旧版本),但公开的 API 范围在 Azure 中列为https://myportal.onmicrosoft.com/test_core_web_api_spa/user_impersonation. 我还使用 Azure 仪表板添加了客户端的 guid 以访问此公开的 API 范围。
我哪里出错了?或者,是否有使用 MSAL、JQuery 客户端和一个简单的 .Net Core Web Api 的简单示例?似乎我发现的所有示例都已过时,或者使用不同的客户端或不同的身份验证方法。
更新以显示 Azure 中用于 Web …
authentication jquery azure-active-directory azure-ad-msal asp.net-core-webapi
我已将测试 .NET Web Api 提升到 Azure 应用程序服务,并在 Azure Active Directory 下包含应用程序注册。然后我去本地做了一些测试,发现Azure希望在登录后在应用程序注册中使用回复URL。应用程序注册中的回复 URL 是应用程序服务的 URL。我的本地实例类似于https://localhost:44377/。在初始部署到 Azure 后,您应该如何在本地测试更改?我能想到的就是创建另一个应用程序注册进行测试,使用我的本地主机回复 URL,然后更新我的 web.config 以指向该开发应用程序注册。然后在再次发布之前,将 web.config 更新回其他应用程序注册。
下面是我用于身份验证的代码,它基于一个简单的 MVC 项目的标准模板。应用程序注册值用于重定向 URL,但也许我应该在测试时覆盖下面的这些值?
public class AccountController : Controller
{
public void SignIn()
{
// Send an OpenID Connect sign-in request.
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
Run Code Online (Sandbox Code Playgroud) 此链接意味着通过查看设置可以在 Cosmos DB 容器中看到唯一键。但是,我似乎无法同时使用门户和存储资源管理器找到它们。如何查看现有 Cosmos DB 容器上的唯一键?我有一个文档由于密钥冲突而无法加载,这应该是不可能的,所以我需要确认密钥是什么。
我正在尝试按照此处的示例代码进行操作,但我一定遗漏了一些明显的内容。我没有从数据源中读取我的选择列表选项,而是尝试在构造函数中加载它们。但我不断收到错误消息。
InvalidOperationException: Could not create an instance of type 'Microsoft.AspNetCore.Mvc.Rendering.SelectList'. Model bound complex types must not be abstract, or value types and must have a parameterless constructor. Alternatively, set the 'SearchOptions' property to a non-null value.
Run Code Online (Sandbox Code Playgroud)
这是CS代码:
public class TestSelectModel : PageModel
{
private List<SelectListItem> _searchoptions;
[BindProperty(SupportsGet = true)]
public SelectList SearchOptions { get; set; }
public TestSelectModel()
{
_searchoptions = new List<SelectListItem>();
_searchoptions.Add(new SelectListItem("By Email", "By Email", true));
_searchoptions.Add(new SelectListItem("By Request Name", "By Request Name", false));
} …Run Code Online (Sandbox Code Playgroud) 给定下面的示例 json 数据,我如何编写查询以一步提取所有数组数据?我的目标是 ActionRecs 数组 (4) 中的每个项目都有一行。我的实际 json 更复杂,但我认为这为我的目标提供了一个很好的例子。
declare @json2 nvarchar(max)
set @json2 = '{
"RequestId": "1",
"ActionRecs": [
{
"Type": "Submit",
"Employee": "Joe"
},
{
"Type": "Review",
"Employee": "Betty"
},
{
"Type": "Approve",
"Employee": "Sam"
},
{
"Type": "Approve",
"Employee": "Bill"
}
]
}'
SELECT x.*
, JSON_QUERY(@json2, '$.ActionRecs') as ActionArray
from OPENJSON(@json2)
with (Id varchar(5) '$.RequestId') as x
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 Graph API 从表单库下载 XML 文件,但它不起作用。我在这里引用文档,我认为它告诉我正确的语法是GET /sites/{siteId}/drive/items/{item-id}/content。但是,当我使用 Graph Explorer 使用该语法时,它会显示 404 File Not Found。接下来,我尝试了该语法GET /drives/{drive-id}/items/{item-id}/content,该语法返回状态代码 0,但消息正文仅显示 {"isTrusted": true}。我应该注意,如果我删除 URL 上的最后一个参数并使用GET /drives/{drive-id}/items/{item-id}它的语法,确实会带回有关文件的信息。
语法有问题吗?这也许不是您可以对表单库中的 XML 文件执行的操作吗?这可能是 Graph Explorer 的限制吗?
我正在尝试学习存储库模式并查看通用存储库,我无法看到如何处理自定义的select语句.例如,使用本文,作者使用select by ID和select all.
public interface IGenericRepository<T> where T:class
{
IEnumerable<T> SelectAll();
T SelectByID(object id);
void Insert(T obj);
void Update(T obj);
void Delete(object id);
void Save();
}
Run Code Online (Sandbox Code Playgroud)
后来文章使用Northwind实现了IGenericRepository接口.然后,它用于创建Customer控制器.
public class CustomerController : Controller
{
private IGenericRepository<Customer> repository = null;
public CustomerController()
{
this.repository = new GenericRepository<Customer>();
}
...
Run Code Online (Sandbox Code Playgroud)
这将处理按ID选择所有客户或一个客户的列表,但是我遇到的是一些更真实的例子,例如"为客户选择所有客户"或"选择区域的所有客户".另外,您可以使用另一个基于不同实体的控制器来过滤不同的属性.我想我错过了一些基本的东西.如果用户界面需要通过各种过滤器呈现Customer实体(或任何其他实体),那么如何通过坚持使用一个通用存储库来实现?
azure ×2
asp.net ×1
asp.net-mvc ×1
c# ×1
generics ×1
jquery ×1
json ×1
json-query ×1
razor-pages ×1
sharepoint ×1
sql-server ×1