簡體   English   中英

本地 ADFS 3.0 OAuth2 WebApi + AngularJS

[英]On Premise ADFS 3.0 OAuth2 WebApi + AngularJS

我完全迷失在這一點上,任何幫助將不勝感激。

當我從 angularJS 通過我的客戶端應用程序單擊Login ,我重定向到:

https://adfs.dev5.local/adfs/oauth2/authorize?response_type=code&client_id=09c9a8a2-6bf1-427d-89ba-45c2c02bb9fc&resource=urn%3Awebapi%3Atest&redirect_uri=https%3A%2F%2Flocalhost%3A44326%2F&state=52e4aa10-f082-4ee6-8823-543ec6e4dce4&client-request-id=e2751f34-f7db-41f4-8c1d-4463e2dca48b&x-client-SKU=Js&x-client-Ver=1.0.15&nonce=93039780-99f6-4efc-8b1b-58aa92df9f82

這很好,我可以輸入我的電子郵件 + 密碼。 登錄后,我將重定向到:

https://localhost:44326/?code=OLCE2LJVeU2Zy2-7Q4oIMg.6Pr0vZgW1QhBAMQoUlgIKAdAsno.q4scWy_ZFQHQEz08M3gU3KJU4NhXdimZiMpgSGBQ8xKN8BLK0Qoe1m1cK5TA2WLLyA14SlnnfA4yHEp5_pTWrIOYNrvOVzNiGU0Zkie-7ae2D1_3U1E1rTmLUTprIadU4gLmo2CeMHkM8gumS285wKsRsMpXVLcavjgjyRM3XoWXSDSP96_eeMgq1osQ1M5170rrGOh_DVqKG-xYnKk5PEC7cWikaR_pxCvwvayLMV0VQIIyq1GJ3CvgK8sWFJGdY3jz247Bh8RPH9-t2_Jz3_7wyqvfvfquAY8tQxElEN1IEoPMOwVdjfBgNlZlw7vtAo79jdH1C_TRNUC5T3IrXw&state=52e4aa10-f082-4ee6-8823-543ec6e4dce4&client-request-id=e2751f34-f7db-41f4-8c1d-4463e2dca48b

這就是我感到困惑的地方我不認為它應該將我重定向到那個......,我知道我需要發布一些如何獲取令牌的信息,但是如何? 我使用 Postman 並且能夠獲得訪問令牌,但我不明白的是我的 WebAPI 如何將其轉換為訪問令牌?

我在 Windows Server 2012 R2 上使用 ADFS 3.0。

設置 ADFS:

Add-ADFSRelyingPartyTrust -Name MyWebAPI -Identifier urn:webapi:test -IssuanceAuthorizationRules '=> issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");' -IssuanceTransformRules 'c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"] => issue(claim = c);'

添加客戶端:

Add-ADFSClient -Name "client" -ClientId "09c9a8a2-6bf1-427d-89ba-45c2c02bb9fc" -RedirectUri "https://localhost:44326/"

啟動.Auth.cs:

app.UseActiveDirectoryFederationServicesBearerAuthentication(
    new ActiveDirectoryFederationServicesBearerAuthenticationOptions
    {
        MetadataEndpoint = "https://adfs.dev5.local/FederationMetadata/2007-06/federationmetadata.xml",
        TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
        {
            ValidAudience = ConfigurationManager.AppSettings["ida:Audience"],
        }
    });

觀眾的網絡配置:

<appSettings>
   <add key="ida:Audience" value="https://localhost:44326/" />
</appSettings>

AngularJS adal 設置:

adalProvider.init(
    {
        instance: 'https://adfs.dev5.local/', 
        tenant: 'adfs',
        clientId: '09c9a8a2-6bf1-427d-89ba-45c2c02bb9fc',
        redirectUri: 'https://localhost:44326/'
        //cacheLocation: 'localStorage', // enable this for IE, as sessionStorage does not work for localhost.
    },
    $httpProvider
);

看看這些 Postman樣本

你會看到我做了每個流程,但 ADFS 4.0 具有完整的 OpenID Connect/OAuth 堆棧。

ADFS 3.0 只有身份驗證。 機密客戶的代碼授予。

獲得授權端點的代碼后,您需要將其發送到令牌端點以獲取實際令牌。

有一個很好的例子在這里

還要注意 js 客戶端通常使用隱式流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM