MSAL的行为好像在其API库层有一个硬编码的catch 22,当我使用它时似乎不合逻辑.
string[] scopesArrayNonNullWORKS = new string[] { "email" };
string[] scopesArrayAlreadyThereInMsalCalls_FAILS = new string[] { "openid" };
string[] scopesArrayNoExtraScopesNeeded_FAILS = new string[0];
Microsoft.Identity.Client.ConfidentialClientApplication myCliApp;
myCliApp.AcquireTokenByAuthorizationCodeAsync(code, scopesArray);
Run Code Online (Sandbox Code Playgroud)
MSAL内置并在每次调用时对这些范围进行硬编码:openid,profile,offline_access.
这很好,对我有用.我不需要任何额外的范围.
但是,我不能使用null或空范围列表.这就像MSAL库层强迫我要求我不需要或不想要的范围.如果我包含电子邮件(我不需要),那么库层对非null的Scopes参数感到满意,一切正常.
如果我使用我需要的一个范围,openid,那么库层错误,因为我已经包含了一个已经存在的重复范围openid.
这似乎是一个捕获22和周期性不合逻辑.我不能使用我需要的范围,或者它是错误的,因为它们是预定义的.我无法传入一个空的范围列表(并使用预定义的)或它的错误.如果我传入一个我不想要或不需要的非null范围,那么它可以工作.
我必须错过一个关键的概念细节.
我想使用这3个,只有这3个范围... openid,profile,offline_access.
此catch 22的错误示例:MSAL始终发送范围'openid profile offline_access'.它们无法被抑制,因为它们是库运行所必需的.请勿在scope参数中包含任何这些范围.
我已经为用户登录/注销实现了Azure B2C,并且可以获取id_token并将其传递给我的Web API进行授权,一切正常.现在,我有一些Web API方法应该只能由客户端Web应用程序(ASP.NET 4.6)访问,这意味着OAuth 2.0"客户端凭据授予".我已经做了很多研究,而我能找到的最接近的是这个快速启动,它在B2C应用程序中使用ADAL来调用Graph API.
我跟着走了,到了我试图获取客户端访问令牌的地步,如下面的代码所示.但是,无论我传递给AcquireToken方法作为资源,我一直得到一个错误,即我传递的应用程序名称在租户中不存在.我实际上不确定应该通过什么,因为在B2C世界中,您没有将Web API注册为应用程序,而是您的所有应用程序都有一个应用程序ID.
是否支持上述方案,我该怎么做?
public async Task<string> SendGraphGetRequest(string api, string query)
{
// First, use ADAL to acquire a token by using the app's identity (the credential)
// The first parameter is the resource we want an access_token for; in this case, the Graph API.
//*** In my case I want to replace the graph API URL with my own WebAPI
AuthenticationResult result = authContext.AcquireToken("https://graph.windows.net", credential);
Run Code Online (Sandbox Code Playgroud) 我怎么可以要求Access Token在邮差针对Azure的AD B2C租户?
我尝试从Run NowAzure门户网站中获取网址并将其放入,Auth Url但会产生以下错误:
更新
在Chris的回答之后,我现在已经超过了上述错误.我可以登录但仍然无法获取访问令牌:
AADB2C90085:该服务遇到内部错误.请重新进行身份验证,然后重试.相关ID:45c56d47-4739-465f-8e02-49ba5b3a1b86时间戳:2017-11-16 15:27:52Z
任何人都可以给我一些关于如何使用azure自签名证书在Xamarin Forms iOS和Android应用程序中验证Azure AD的背景知识.
我试图在没有凭证的情况下对azure AD进行身份验证,我已经提供了身份验证证书,但我对身份验证部分没有明确规定.
我 从微软看到了这个 指南.但是不知道如何使用Xamarin在客户端实现相同的功能.任何人都可以帮我解决这个问题.
我是Xamarin和Azure的新手.所以任何形式的链接/样本的帮助都非常感谢.我在谷歌搜索了一个解决方案.但最终会产生完全混乱.
我见过很多人对我们在Azure AD B2C租户中可以做什么以及B2C租户和普通Azure AD租户之间的区别感到非常困惑.主要问题是:
Azure AD B2C租户与普通Azure AD租户之间有什么区别?
由于我甚至可以使用B2C租户中的某些功能,例如Azure AD Connect,在B2C租户中购买新订阅并使用它等等,我应该使用这些功能吗?
为什么要在B2C租户中提供这些功能?为什么不在普通的Azure AD租户中使用B2C?
我目前正在尝试使用 webapi 开发 SPA 应用程序,我正在使用 msal 进行登录。流程是用户登录,获取 idtoken(用于为我的 api 授权),使用 Acquiretokensilent 方法获取访问令牌(用于图形 api)。我在一小时前通过在作用域中传递 clientID 使用acquiretokensilent 更新 idToken。但是在 idToken 过期后我仍然注销了。我看到它没有在浏览器存储中刷新。
所以我的问题是,无论如何我可以更新 id 令牌并使用户保持登录状态?任何帮助都会很棒。
我目前正在构建一个 C# Net Core 2.2 应用程序,该应用程序使用 Azure B2C OIDC 进行登录/身份验证。我已经自定义了登录页面,并且知道如何使用自定义页面布局使用我网站上托管的 CSS 和代码来自定义编辑/忘记密码屏幕。
我遇到的问题是在注销时,我被重定向到 /AzureADB2C/Account/SignOut。我想像使用登录页面一样修改 CSS,或者更改该 URL 以转到托管在我网站上的自定义控制器操作。
有谁知道如何/什么过程是管理?看起来很奇怪,他们将为“除”注销过程之外的所有内容提供自定义布局。
作为一种解决方法,我发现我可以添加一个“重写选项”来处理注销 URL 并将其重写到我网站上的控制器。但是,我不确定这是否是完成此任务的最佳方式,它位于一个非常模糊的 MSDN 页面上,但确实有效。见下文:
Run Code Online (Sandbox Code Playgroud)// Inside Startup.cs // Workaround for SignedOut URL error in MSFT code RewriteOptions rewrite = new RewriteOptions().AddRedirect("AzureADB2C/Account/SignedOut","Account/SignedOut"); app.UseRewriter(rewrite);
我正在关注https://docs.microsoft.com/en-us/azure/active-directory-b2c/tutorial-create-user-flows 上的教程。我创建了注册/登录用户流程,我只是尝试使用它。我选择了 Google 提供商,因为我已经定义了它。我输入我的国家和显示名称,因为我选择了这些参数是必需的。然后我被重定向到我的应用程序的重定向 URI,即https://jwt.ms。重定向是:
问题是,JWT.MS 没有解码它,我只是看到:
我尝试将我的令牌粘贴到框中,但没有任何反应。我也尝试使用具有相同令牌的 JWT.IO。我得到的信息:
无效签名
为什么 B2C 会向我返回无效的令牌?
我们正尝试使用implict流程实现Azure AD B2C身份验证.我们可以登录并成功重定向到正确的网址,其中包含重定向网址(id_token和代码)上的正确项目.然而,正如本文建议(https://github.com/Azure/azure-content/blob/master/articles/active-directory-b2c/active-directory-b2c-reference-oidc.md#get-a-token然后,应用程序需要对令牌端点执行xhr POST请求,以检索应用程序需要与之交互的资源(web api)的令牌.然而,当我尝试做一个XHR POST到令牌端点(https://login.microsoftonline.com/ {}租户/oauth2/v2.0/token?p=b2c_1_signinpolicy)浏览器(相当正确地)执行预检检查(OPTIONS调用)以确定它是否可以调用端点,因为它位于不同的域上.OPTION调用有效,但它不包含浏览器允许POST调用端点所需的头文件(Access-Control-Allow-Origin).
我错过了什么或做错了什么?
任何帮助赞赏!
乔恩
我们希望将Azure AD B2C用于我们的Web应用程序,以允许用户使用"本地"帐户/密码登录或使用他们的社交帐户(Facebook等). https://docs.microsoft.com/azure/active-directory-b2c/active-directory-b2c-overview
但是,在此应用程序中,我们可能会定位组织,因此我们还希望与公司现有的Azure AD公司帐户集成.这样,用户无需创建新帐户即可使用其现有的公司帐户.
事实证明,Azure AD B2C中有一个(新)功能,允许您使用如下所述的自定义策略显式链接到外部Azure AD帐户:https://docs.microsoft.com/azure/active-目录B2C /主动目录B2C -设置- AAD定制
不幸的是,这只有在我们事先知道我们需要链接哪些外部公司并添加特定配置时才有效.它还泄漏有关谁正在使用该应用程序的信息,因为公司名称在登录页面上列为选项.
我也看过Azure AD B2B功能,但我认为这也不合适.
我们真正喜欢的是Azure AD B2C为(公司)Microsoft帐户提供通用登录,该帐户检测该电子邮件地址是否已在任何Azure AD系统中处理; 如果是,则它将身份验证委派给该系统,但如果不是,则它将回退到Azure AD B2C本地帐户.
此通用登录已用于访问标准Microsoft应用程序,例如其门户.有没有人知道这是否可以在Azure AD B2C中实现,或者是否有可能的时间范围?是否有任何替代系统可以提供类似的功能?
azure-ad-b2c ×10
azure ×6
azure-ad-b2b ×1
c# ×1
javascript ×1
jwt ×1
msal.js ×1
oauth-2.0 ×1
openid ×1
postman ×1