Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 23

0
votes
answers
25 views
+10

在Xamarin中使用Azure AD的跨應用程序SSO

2

我試圖在我們的Xamarin應用程序中啓用跨應用程序SSO,以便如果用戶已安裝並登錄到其中一個應用程序,他會自動登錄到我的其他應用程序組織。以下文件聲稱達到要求在Xamarin中使用Azure AD的跨應用程序SSO

https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-sso-android。我們正在關注非經紀人協助登錄流程。

我已經認真履行如下─

  1. 的應用程序規定的三個條件manifest文件中都使用相同的android:sharedUserId
  2. 用於它們的本地客戶端是相同的。只有重定向網址與應用程序不同。
  3. 所有這些都使用相同的密鑰庫進行簽名。

但是功能尚未實現。當我安裝並登錄到一個應用程序,第二應用仍然提示輸入憑據當我嘗試使用下面的行獲得訪問令牌

authResult = await authContext.AcquireTokenAsync(resource, clientId, new Uri(returnUri), new PlatformParameters((Activity)Forms.Context)); 

請幫助我知道如果有什麼我可以做做到這一點。

+0

嗨,我正在尋找相同的功能。你有沒有設法解決這個問題? –

+0

還沒有。但我會盡快發佈答案。 –

沙发
0
0

由於Xamarin.Forms中的限制,沒有代理(Microsoft Authenticator或公司門戶)的SSO不適用於當前版本的ADAL。 我們有一個工作項目來更新文檔。

0
votes
answers
37 views
+10

公司帳戶與MSA帳戶之間的差異使用msal

3

我正在用MSAL創建一個測試應用程序,以瞭解我們如何在我們的產品中實施它。我貼上了一些我無法解釋的東西,所以我希望有人能向我解釋。公司帳戶與MSA帳戶之間的差異使用msal

我可以配置在應用開發這樣的網站應用

enter image description here

我用msal.js獲得令牌授權

enter image description here

我重定向到登錄頁面預計,如果我嘗試使用我的公司帳戶登錄,我沒有進入同意屏幕並返回以下錯誤說明:

AADSTS65005:應用程序'auth-test'詢問資源上不存在的作用域'openid'。聯繫應用程序供應商。

如果我和我的MSA帳號登錄,我可以同意畫面,並回到我的授權令牌的應用程序如預期

因此,對於相同的應用程序有公司帳戶和MSA帳戶之間的區別?我必須做些什麼以便我可以使用我的公司帳戶獲得許可屏幕並使用授權令牌返回到應用程序?

沙发
0
0

這樣做的原因的錯誤是msal.js需要ID令牌通過的OpenID如果該應用程序不具有重定向URL未添加範圍提供。

嘗試返回https://apps.dev.microsoft.com,編輯您的應用的註冊信息,選擇「添加平臺」,然後選擇「網頁」。然後添加重定向網址,例如http://localhost

0
votes
answers
32 views
+10

How to connect with Java into Active Directory

I am using Weblogic, Ejb3.0. Java 1.6

I need to access Active Directory via Java code. I read about several ways (Kerberos, LDAP)

Anyone could advice me on comfortable way of doing so? where could I have some full code examples,

thanks, ray.

0
votes
answers
44 views
+10

python django:登錄辦公室365

1

我想爲Django網站實現office365/azureAD/MS圖形認證系統。python django:登錄辦公室365

我的大學擁有適用於所有學生的office365帳戶系統。如果您使用您的ID登錄,您可以訪問所有MS Office軟件和其他大學系統。

是這樣的: enter image description here

我試圖讓這個學生可以使用這個系統登錄到我的網站。而不是我實現一個用戶/密碼模型和相關的意見等。

我覺得我一直在繞圈。

我很感激任何幫助。

沙发
0
1

您可能可以使用django-social-auth及其AzureAD backend

你需要在AzureAD中register your application。聽起來你需要問你的大學的IT部門爲你做這個部分。

+0

你認爲有可能使用如圖所示的文檔'Google+' 然後谷歌的後端換出的細節,如密鑰和密碼後,如果我能得到的Uni同意註冊我的應用程序? 我還發現似乎做同樣工作的django-allauth軟件包。 –

+0

您可以使用它支持多個後端。一些工作可能會被切斷。您必須能夠以某種方式將Office 365帳戶與其各自的Google帳戶相關聯。 – kichik

0
votes
answers
66 views
+10

無法發送從服務器 - 客戶端,反之亦然ping請求

-1

我曾在同一virutual機器上安裝Windows Server 2012中R2虛擬框
還安裝了Windows 7
我configued我的客戶端的DNS爲我的服務器IP地址
例如:
server-ip- a.b.c.d client-dns - a.b.c.d
兩個系統有不同的C類IP地址和
相同的默認網關
在服務器DNS我configued爲空白
那麼爲什麼(。)我無法ping我的服務器和客戶端無法發送從服務器 - 客戶端,反之亦然ping請求

沙发
0
0

通過在虛擬盒網絡設置
步驟添加NAT網絡解決:在這兩個設備的網絡設置添加
在虛框的喜好創建新的網絡..
到NAT網絡..
然後這兩臺機器將通信..

0
votes
answers
41 views
+10

從DirectorySearcher獲取子對象屬性的最有效方法導致在Active Directory中使用C#

0

我試圖找到最有效的方式來獲取某些類型的對象的父OU已使用DirectorySearcher查詢來獲取屬性。這些對象的父母是用戶在Active Directory中(直接或間接)成員的組。從DirectorySearcher獲取子對象屬性的最有效方法導致在Active Directory中使用C#

我想我已經找到了一個很好的遞歸解決方案來獲得這些組,但是一旦我有了我的結果集,我不知道最有效的方式來獲取數據。現在,我正在使用每個結果的路徑來獲取數據,就像我只是獲取單個對象一樣。

我想知道是否有更快的方法來做到這一點,可能是通過添加到我的DirectorySeacherFilter並直接在我的查詢結果中獲取這些對象。我正在搜索的對象是對象,所以看起來最接近我可以在DirectorySearcher查詢中找到它們,它們將成爲它們的父OU。

foreach (SearchResult result in matchingADGroups) 
{ 
    // Here I need to get result's child object properties(could be multiple children) 
    DirectoryEntry entry = new DirectoryEntry("LDAP://" + result.Path.Substring(7)); 

    foreach(DirectoryEntry child in entry.Children) 
    { 
     Shortcut shortcut = new Shortcut(); 
     shortcut.DisplayName = (string)child.Properties["myDisplayName"].Value; 
     shortcut.Id = (string)child.Properties["myId"].Value; 

     shortcuts.Add(shortcut); 
    } 
} 
沙发
0
0

我一直懷疑Web請求或查詢執行時發生遞歸。但如果它適合你,太棒了!
您可以使用DirectorySearcher作爲子節點來進一步縮小分值。設置DirectorySearcher:

DirectorySearcher _Search = new DirectorySearcher(entry); 
_Search.Filter = "(&(objectCategory=person)(objectClass=user))";//can add more parameters 

根據ActiveDirectory的設置方式,您可以添加更多參數。 接下來,您可以指定在結果需要

_Search.PropertiesToLoad.Add("distinguishedname"); 

使用的FindAll()方法來獲取所有對象和使用foreach循環遍歷它們的屬性:

foreach (var result in _Search.FindAll()){ 
     //DO whatever you want here 
     Shortcut shortcut = new Shortcut(); 
     shortcut.DisplayName = result.DisplayName; 

} 

希望這有助於。

0
votes
answers
38 views
+10

Django-Python3-LDAP直接綁定

1

是否有可能通過django-python3-ldap直接綁定到AD?我知道搜索和綁定是可能的,但是這需要某個人的AD密碼可供團隊的其他成員訪問(即在託管Django應用程序的服務器上的環境變量中)。Django-Python3-LDAP直接綁定

沙发
0
1

我相信,如果你設置這些設置None你可以做到這一點:用於查詢LDAP 數據庫用戶的

的LDAP用戶名和密碼:

LDAP_AUTH_CONNECTION_USERNAME = None 
LDAP_AUTH_CONNECTION_PASSWORD = None 

自述用戶細節。如果沒有,則認證用戶將 用於查詢,並且ldap_sync_users命令將執行 匿名查詢。

我沒有用AD測試過它,但它可以與OpenLDAP一起使用。祝你好運!

0
votes
answers
31 views
+10

MSAL和Azure AD:當我只想獲取用戶ID時,應傳遞哪些範圍?

0

我正在使用MSAL獲取ID令牌,然後用它來訪問Web API應用程序。我有幾個問題,我想知道是否有人可以幫助我理解發生了什麼。MSAL和Azure AD:當我只想獲取用戶ID時,應傳遞哪些範圍?

讓我從客戶端的身份驗證過程開始。在這種情況下,我構建了一個Windows窗體應用程序,該應用程序使用以下代碼來驗證當前用戶(即,爲了獲得用於在用戶訪問Web時驗證用戶的ID令牌API應用程序):

//constructor code 
_clientApp = new PublicClientApplication(ClientId, 
        Authority, //which url here? 
        TokenCacheHelper.GetUserCache()); 
_scopes = new []{ "user.read" }; //what to put here? 

//inside a helper method 
try { 
     return await _clientApp.AcquireTokenSilentAsync(_scopes, _clientApp.Users.FirstOrDefault()); 
} 
catch (MsalUiRequiredException ex) { 
    try { 
      return await _clientApp.AcquireTokenAsync(_scopes); 
     } 
     catch (MsalException ex) { 
      return null; 
     } 
} 

我想清除的第一件事是應該用於權限參數的值。在這種情況下,我使用窗體上的網址:

https://login.microsoftonline.com/{Tenant}/oauth2/v2.0/token 

不過,我的印象是,我也可以用這樣的僥倖:

https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration

它似乎一個端點是特定於我的Azure AD,而另一個看起來像一般(全部捕獲)URL ...我在哪裏可以找到關於這些端點的更多信息以及每個端點的目的...

另一件事我無法把握的是範圍。我對查詢MS Graph(或任何其他Azure相關服務)並不感興趣。在以前版本的MSAL庫中,可以引用其中一個默認的作用域。但是,似乎這是不可能的(至少,我試過並得到一個異常,說我不應該通過默認範圍......)。

傳遞一個空集合(例如:new List<string>())或null也會導致錯誤。所以,在這種情況下,我已經結束了通過user.read範圍(如果我沒有弄錯的話,它被MS Graph API使用了。這顯然不是必須的,但它是我設法獲得身份驗證的唯一方法當你只需要一個ID令牌時,如何進行呼叫的任何線索?我應該調用一個不同的方法嗎?

移動到服務器端,我有一個Web API應用程序,它的訪問權限是僅限於在認證頭(承載)傳遞一個ID令牌調用根據這一sample,我應該使用這樣的:現在

private void ConfigureAuth(IAppBuilder app) { 
    var authority = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration"; 
    app.UseOAuthBearerAuthentication(
     new OAuthBearerAuthenticationOptions { 
      AccessTokenFormat = new JwtFormat(GetTokenValidationParameters(), 
        new OpenIdConnectCachingSecurityTokenProvider(authority)), 
              Provider = new OAuthBearerAuthenticationProvider { 
                OnValidateIdentity = ValidateIdentity 
              } 
              }); 
} 

,這樣做的工作,它會返回401的所有請求其不要沒有VA蓋子ID令牌。有一個問題:有沒有一種方法可以從票證的身份中指定用於識別用戶名(控制器的User.Identity.Name)的聲明?在這種情況下,我已經結束處理OnValidateIdentity爲了做到這一點的代碼看起來像這樣:

private Task ValidateIdentity(OAuthValidateIdentityContext arg) { 
    //username not getting correctly filled 
    //so, i'm handling this event in order to set it up 
    //from the preferred_username claim 
    if (!arg.HasError && arg.IsValidated) { 
     var identity = arg.Ticket.Identity; 
     var username = identity.Claims.FirstOrDefault(c => c.Type == "preferred_username")?.Value ?? ""; 
     if (!string.IsNullOrEmpty(username)) { 
      identity.AddClaim(new Claim(ClaimTypes.Name, username)); 
     } 
    } 
    return Task.CompletedTask; 
} 

正如你所看到的,我在尋找從ID令牌preferred_username要求(這是由客戶獲得)並使用其值設置Name聲明。有沒有任何選項可以讓我自動執行此操作?我在OAuthBearerAuthenticationMiddleware的配置中錯過了什麼嗎?

沙发
0
0

關於你提到的第一個查詢 - 我在哪裏可以找到有關這些端點以及什麼是每個更多信息之目的...

回答 - https://login.microsoftonline.com/{租戶} /v2.0/.well-known/openid-configuration

{租戶}可以採取四個值之一:

  1. common - 擁有個人Microsoft帳戶和工作或學校帳戶的用戶f rom Azure Active Directory(Azure AD)可以登錄到應用程序。

  2. 組織 - 只有擁有來自Azure AD的工作或學校帳戶的用戶才能登錄該應用程序。

  3. 消費者 - 只有擁有個人Microsoft帳戶的用戶才能登錄該應用程序。

  4. 8eaef023-2b34-4da1-9baa-8bc8c9d6a490contoso.onmicrosoft.com - 與特定Azure的AD租戶單位或學校的帳戶的用戶纔可以登錄到應用程序。可以使用Azure AD租戶的友好域名或租戶的GUID標識符。

關於你質疑範圍 -

回答 - 請參閱本文件 - OpenID Connect scopes

關於你質疑索賠 -

答案 - 參考此GIT Hub示例 - active-directory-dotnet-webapp-roleclaims

+0

Hello Mohit。 1幫助。 2,不是真的。例如,其中一些範圍是默認發送的,正如我所說的,您不能在範圍集合中重複使用它們。關於3,我找到了一個答案:https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/blob/f10a045459e7cb07548806561a47ecdb3471f5f6/src/Microsoft.IdentityModel.Tokens/TokenValidationParameters.cs#L413 –

0
votes
answers
15 views
+10

Get-ADDomain失敗,UI工程

0

嘗試將Windows Server 2016加入到使用PowerShell的域。Get-ADDomain失敗,UI工程

然而,PowerShell的上Get-ADDomain失敗:

Get-ADDomain -Identity customer.com.au -Credential $domainCred 

錯誤:

獲取-ADDomain:無法與服務器聯繫。這可能是因爲此 服務器不存在,它當前處於關閉狀態,或者它沒有運行 Active Directory Web服務。在線:1 char:1 + Get-ADDomain -Identity customer.com.au -Credential $ domainCred + ~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:ResourceUnavailable:(customer.com.au:ADDomain)[Get- ADDomain],ADServerDownException + FullyQualifiedErrorId:ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADDomain

Get-ADDomainController -Discover -Service ADWS -DomainName customer.com.au 


Domain  : customer.com.au 
Forest  : customer.com.au 
HostName : {CUSTOMERSVRDC06.customer.com.au} 
IPv4Address : 10.20.104.86 
IPv6Address : 
Name  : CUSTOMERSVRDC06 
Site  : customer-main-site 

因此,AD Web服務在該域中的服務器上運行。我可以解析域名。 而且我甚至可以通過服務器管理器手動升級此服務器,只需使用相同的憑據。

有人知道AD PowerShell有什麼問題嗎?

乾杯 大衛

+0

從https://technet.microsoft.com/zh-cn/library/dd772723(v=ws.10).aspx ADWS使用端口9389和SOAP通信。是否有防火牆規則來防止它? –

+0

Test-NetConnection表示9389已打開。 –

+0

你可以ping DC嗎? –

沙发
0
0

聽起來像是你無法到達ADWS。如果防火牆或策略的設計不允許,這對公司網絡來說很常見。無論如何,你也可以通過下面的選項來實現。

  1. 使用上獲得-AD?cmdlet具有-Server PARAM並指定DC進行查詢。你說你知道ADWS至少有1個DC,並且可以到達。

  2. 使用Invoke-Command或其他PSRemoting功能遠程訪問DC並運行這些命令,就像在DC本地登錄一樣。網絡上不需要ADWS。

  3. 您也可以使用PSexec與Invoke-Expression在目標機器上運行您的代碼。

+0

其實我可以得到它的 「之類的」 使用工作 $ splatArgs = @ { NoGlobalCatalog = $假 CreateDnsDelegation = $假 憑證= $ domainCred CriticalReplicationOnly = $假 DatabasePath = 「C: NTDS」 域名= $則domainName InstallDns = $真實 LOGPATH = 「C: NTDS」 NoRebootOnCompletion = $假 網站名稱= 「以客戶爲主要站點」 SysvolPath = 「C: SYSVOL」 SafeModeAdministratorPassword = $ secpasswd 力= $ true } Install-ADD SDomainController @splatArgs 它只是掛在創建NTDS對象上,但是完成所有工作。 UI仍然有效。 –

板凳
0
0

原來在網絡端還有一個端口丟失。 他們現在打開了防火牆,它工作。我懷疑是一個隨機的高端口。

0
votes
answers
41 views
+10

在Django中修改Active Directory用戶

2

所以我試圖修改我的活動目錄中的用戶。截至目前,我可以以AD用戶的身份登錄,但當我嘗試編輯我的個人資料時,它並未在AD中實施。在Django中修改Active Directory用戶

我使用django-auth-ldap作爲AD後端。

我與具有讀寫權限的用戶建立了連接。

AUTH_LDAP_SERVER_URI = "ldap://192.168.1.12" 

AUTH_LDAP_BIND_DN = "user" 
AUTH_LDAP_BIND_PASSWORD = "password" 
AUTH_LDAP_CONNECTION_OPTIONS = { 
    ldap.OPT_DEBUG_LEVEL: 1, 
    ldap.OPT_REFERRALS: 0 
} 
AUTH_LDAP_USER_SEARCH = LDAPSearch("DC=sb,DC=ch", ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)") 

# Set up the basic group parameters. 
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("DC=sb,DC=ch", ldap.SCOPE_SUBTREE, "(objectClass=group)") 
AUTH_LDAP_GROUP_TYPE = NestedActiveDirectoryGroupType() 


# What to do once the user is authenticated 
AUTH_LDAP_USER_ATTR_MAP = { 
    "first_name": "givenName", 
    "last_name": "sn", 
    "email": "mail" 
} 

AUTH_LDAP_USER_FLAGS_BY_GROUP = { 
    "is_active": "CN=ipa-users,cn=users,DC=sb,DC=ch", 
    "is_staff": "CN=ipa-users,cn=users,DC=sb,DC=ch", 
    "is_superuser": "CN=ipa-users,cn=users,DC=sb,DC=ch" 
} 

# This is the default, but be explicit. 
AUTH_LDAP_ALWAYS_UPDATE_USER = True 

# Use LDAP group membership to calculate group permissions. 
AUTH_LDAP_FIND_GROUP_PERMS = True 

# Cache settings 
AUTH_LDAP_CACHE_GROUPS = True 
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600 

AUTHENTICATION_BACKENDS = (
    'django_auth_ldap.backend.LDAPBackend', 
    'django.contrib.auth.backends.ModelBackend', 
) 

那麼我需要什麼設置或得到什麼東西?

這是我edit_profile.html:

<form method="post"> 
     {% csrf_token %} 

     <label for="first_name">Vorname </label> 
     <input style="margin-bottom: 1em;" id="first_name" class="form-control" type="text" name="first_name" value="{{ user.first_name }}"><br> 
     <label for="last_name">Nachname </label> 
     <input style=" margin-bottom: 1em;" id="last_name" class="form-control" type="text" name="last_name" value="{{ user.last_name }}"><br> 
     <label for="email">E-Mail </label> 
     <input style="margin-bottom: 1em;" id="email" class="form-control" type="email" required=True unique=True name="email" value="{{ user.email }}"><br> 

     <button class="btn btn-success btn-sm" type="submit">Bestätigen</button> 
沙发
0
3

這是不可能的,只有django-auth-ldap

粗糙guesstimation表明你正在使用django-auth-ldap(我更新了你的問題)。看一眼就可以看出它只有一個後端,而且不能做任何其他事情。

如果你真的想更新AD中的一些數據,你需要自己做。我正在使用python-ldap3,我可以爲此推薦。它還包括一些專門針對AD的幫手。


UPD:根據要求,一個例子使用python-ldap3

類似的東西,不知道下面的作品是否代碼(它是現有的代碼位的混搭)。但它應該給你一個你應該做什麼的想法。歡迎來到LDAP的地獄。

import ldap3 

conn = ldap3.Connection(
    server="ldaps://foobar", 
    user="[email protected]", # normally full DN, but AD supports this format as well 
    password="password", 
    auto_bind=ldap3.AUTO_BIND_NONE, 
    authentication=ldap3.SIMPLE, 
    raise_exceptions=True, 
    auto_referrals=False, # 90% you want it set to False 
    receive_timeout=10, # seconds, exception afterwards 
) 

conn.start_tls() 
conn.bind() 

search = conn.extend.standard.paged_search(
    search_base="dc=domain", 
    search_filter="([email protected])", # or (cn=username) or (sAMAccountName=username) or whatever 
    search_scope=ldap3.SUBTREE, 
    attributes=ldap3.ALL_ATTRIBUTES, 
    dereference_aliases=ldap3.DEREF_NEVER, 
    generator=True, 
) 

entries = [entry for entry in search if entry["type"] == "searchResEntry"] # not sure how to get rid of all the aliases otherwise 

assert len(entries) is 1, "got {0} entries".format(len(entries)) 
entry = entries[0] 

dn = entry["dn"] 

changes = { 
    "attributeName": [ 
     [ldap3.MODIFY_DELETE, ["old value 1", "old value 2",]], 
     [ldap3.MODIFY_ADD, ["a new value"]], 
    ] 
} 

conn.modify(dn, changes) 

conn.unbind() 
+0

非常感謝!你有這樣的例子嗎? – GeniusBehind

+1

@ZeicIC參見上面的更新 – Art

+0

這個代碼在setting.py文件中,還是我必須綁定它somwhere。如果是的話,你能告訴我如何? – GeniusBehind