在 Azure AD 中,当我们进行诸如此类的调用时,AuthenticationContext.AcquireTokenAsync(resource, new ClientAssertionCertificate(_clientId, _cert))
不清楚究竟发生了什么。
如果有的话,证书的哪一部分会被交换?
是否有挑战/响应发生?
客户端是否需要私钥作为其中的一部分?
我正在通过以下示例:
https://azure.microsoft.com/resources/samples/active-directory-dotnet-webapp-groupclaims/
若要运行该示例,我需要对Microsoft Graph具有Directory.Read.All权限:
为您的应用程序配置权限。在这种情况下,在“设置”菜单中,选择“所需权限”部分,然后单击“添加”,然后选择“ API”,然后在文本框中键入Microsoft Graph。然后,单击“选择权限”,然后选择 Directory.Read.All。
Directory.Read.All需要Azure AD管理员同意。
我的Azure AD应用程序没有Web用户界面。
如何让我们的Azure AD管理员在不花费太多时间的情况下提供同意?
我们的Azure AD管理员是繁忙且昂贵的资源。需要花费很多时间来预定他的时间,我希望我能在参与他之前进行同意过程。
我有一个包含一堆普通VBA宏的Excel工作表.此文件不断更新并作为Excel加载项(.xlam)进行分发.到目前为止,我对它的工作方式非常满意.
现在我想添加一个功能区选项卡和按钮来运行其中一些宏.最初,我很高兴能找到这篇MSDN文章,但后来感到沮丧的SetCustomUI
似乎并不存在Excel(只有Project),所以我不能简单地使用它Workbook_Open
.其他SO问题证实了这一点,但不提供替代方案.
我的要求:
有任何想法吗?
POST https://graph.microsoft.com/v1.0/Groups/bb754bb6-xxxx-xxxx-8e66-4c57c626ee29/members
Accept: application/json
Authorization: Bearer <access key>
Content:
{
"directoryObject": {
"id": "5cb55683-xxxx-xxxx-xxxx-5e163c939005"
}
}
Run Code Online (Sandbox Code Playgroud)
回复:
{
error: {
code: "BadRequest"
message: "Write requests are only supported on contained entities"
innerError: {
request-id: "20167459-5495-4034-9e27-503c64340c1f"
date: "2015-11-27T14:25:20"
}-
}-
}
Run Code Online (Sandbox Code Playgroud)
我可以得到一个组的成员,但不能向它添加成员,任何建议将不胜感激。
office365 office365api office365-restapi microsoft-graph-api
我有一个C#web API REST服务后端,我提供CMS,网页和Angular2应用程序的服务(这是相关的).Angular应用程序需要通过后端发送用户名和密码(原始凭据)进行身份验证,后端使用这些来请求访问Azure Active Directory(带UserCredentials
)的access_token,并将access_token发送回Angular应用程序,用于授权在它的请求(Authorization: Bearer
).这是我正在验证的方式:
UserCredential uc = new UserPasswordCredential(user, password);
AuthenticationContext authContext = new AuthenticationContext(Constants.authority, false);
AuthenticationResult result = authContext.AcquireTokenAsync(Constants.audience, Constants.clientIdNative, uc).Result;
Run Code Online (Sandbox Code Playgroud)
问题是它为该令牌生成一小时缓存,如果用户注销并再次使用用户或用户+错误密码再次进入,则身份验证只会查找该用户的缓存并忽略或不验证密码.在一小时的窗口中,任何人都可以使用用户名进入.
我在这里和许多其他网站上找到了注销或清除令牌的方法,但这些不适用于我的后端,因为它是无状态的.我不管理这些之间的会话或HTTP上下文.如果有人可以指导解决这个问题,我正在使用Microsoft.IdentityModel.Clients.ActiveDirectory
版本3.13.1.846 的最后一个程序集,我知道该方法AcquireTokenByAuthorizationCodeAsync
不会查找缓存,但是没有用于原始凭据的实现.
谢谢你们,希望你能帮助我.
我在这里创建了一个与此不同的配置机制: 组配置机制
我已经在我的开发人员租户上成功实施了整个工作流程。现在我们的生产环境中,我总是收到此错误:
[Error]Invoke - RestMethod: {
"error": "unauthorized_client",
"error_description": "AADSTS70001: Application 'ffffffff-...' is disabled.\r\nTrace ID: ffffffff-180f-4bc4-8087-867633c83e00\r\nCorrelation ID: ffffffff-2e5d-481d-adee-f068dbebaab1\r\nTimestamp: 2018-10-29 09:06:59Z",
"error_codes": [70001],
"timestamp": "2018-10-29 09:06:59Z",
"trace_id": "ffffffff-180f-4bc4-8087-867633c83e00",
"correlation_id": "ffffffff-2e5d-481d-adee-f068dbebaab1"
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码,应该进行身份验证:
function Initialize-Authorization {
param
(
[string]
$ResourceURL = 'https://graph.microsoft.com',
[string]
[parameter(Mandatory)]
$TenantID,
[string]
[Parameter(Mandatory)]
$ClientKey,
[string]
[Parameter(Mandatory)]
$AppID
)
$Authority = "https://login.microsoftonline.com/$TenantID/oauth2/token"
Write-Output "auth: $Authority"
[Reflection.Assembly]::LoadWithPartialName("System.Web") | Out-Null
$EncodedKey = [System.Web.HttpUtility]::UrlEncode($ClientKey)
$body = "grant_type=client_credentials&client_id=$AppID&client_secret=$EncodedKey&resource=$ResourceUrl"
Write-Output "body: $body"
# Request a Token from the graph api
$result = Invoke-RestMethod …
Run Code Online (Sandbox Code Playgroud) 我有一个程序,当它当前从数据库中读取时,可以在这里找到。我让用户选择他们想要显示的特定记录,以便 SQL 命令执行该记录。现在我有一个表,当前显示一些不包含任何 NULL 或空字符串的记录。如果它确实有 NULL 或空字符串,它会给我一个错误并且程序不显示记录。我认为这就是 NoneType 错误的主要来源。我不知道如何解决这个问题。我如何确保它也计算 Null 或空字符串?希望这将修复错误。
如果您要尝试测试数据库,则不会显示像客户这样的表,因为它具有空值。
这是回溯错误:
line '..', in read_display(record)
line = format_.format(*rec)
TypeError: unsupported format string passed to NoneType.__format__
Run Code Online (Sandbox Code Playgroud)
这是我的代码的样子:
import sqlite3
def read_display(record):
database = 'data.db'
connection = sqlite3.connect(database)
c = connection.cursor()
sql = "SELECT * FROM {0}".format(record)
cursor.execute(sql)
conn.commit()
results = cursor.fetchall()
header = tuple(i[0] for i in c.description)
width = max((len(str(x)) for d in data for x in d))
data = [header] + results
config = [{'width': …
Run Code Online (Sandbox Code Playgroud)