2017-09-27 1 views
2

Siteminder 인증을 nodejs/angular 4 웹 응용 프로그램과 "통합"하기 위해 고심하고 있습니다. 서버 측 (노드)에서각도 4 + Siteminder HTTP 헤더 문제

제가 가지고

app.get('*', function(req, res) { 
    //read Siteminder headers 
    if (authenticated) { 
     res.sendFile(path.join(__dirname, 'dist/index.html')); 
    }else{ 
     res.sendFile(path.join(__dirname, 'dist/accessDenied.html')); 
    }   
} 

각도 라우터 나머지를 처리한다.

그리고 이것은 초기 액세스 제어 (api 및 데이터를 검색하는 서비스가 다른 컴퓨터에있는 경우에만 작동합니다. 프런트 엔드/클라이언트 응용 프로그램입니다).

그러나 이제 사용자는 편집 /보기와 같은 역할을 원하며 권한을 처리하기 위해 Siteminder 헤더에서 각 역할을 각도 프런트 엔드로 전달하는 방법을 찾아야합니다. 운이 좋지 않은 요격기를 가지고 놀았으며 각도 앱에서 생성 된 요청으로 만 작동합니다. Siteminder/노드/앵귤러 주제에 대해 질문했지만 여전히 운이 좋지 않은 관련 질문에 대한 몇 가지 제안을 시도했습니다.

저는 노드/각도가 매우 새롭습니다. 양해 해 주셔서 감사합니다.

답변

1

내가 관심을 갖고있는 경우에 대비하여 아래 내용을 게시하여 답변을 찾았습니다. 각도 유니버셜 익스프레스 엔진을 사용하기로 결정했습니다. this example.

본질적으로 Angular는 요청 헤더에 액세스 할 수있는 서버 측에서 실행될 수 있으며 클라이언트 측에서 사용할 수 있습니다.

export class AppComponent implements OnInit { 

    constructor(private cache: TransferState, private injector: Injector, @Inject(PLATFORM_ID) private platformId: Object) {} 

    ngOnInit() { 
     if (isPlatformServer(this.platformId)) 
     {     
      this.cache.set('user_role', this.injector.get('headers').sm_role);     
     } 
    } 

} 

난 그냥 어떤에서 private cache: TransferState를 주입 할 수있는 후 : 내 app.component.ts에서 다음

app.engine('html', (_, options, callback) => { 
    let engine = ngExpressEngine({ 
     bootstrap: ServerAppModule, 
     providers: [ { provide: 'headers', useFactory:() => options.req.headers } ] 
    }); 

    engine(_, options, callback) 
}); 

app.set('view engine', 'html'); 
app.set('views', 'dist'); 

app.use('/', express.static('dist', {index: false})); 

ROUTES.forEach(route => { 
    app.get(route, (req, res) => { 

    console.log('Yaaay Siteminder headers:'); 
    console.dir(req.headers); 

    res.render('index', { 
     req: req, 
     res: res 
    }); 
    }); 
}); 

그리고 내 main.server.ts에서

내 구성 요소를 사용하고 헤더를 어디에서나 사용할 수 있으므로 조정 된 액세스가 잘 이루어집니다.

Et voilà.

+0

안녕하세요, 각도 5 응용 프로그램과 함께 siteminder를 사용하려고하지만 백엔드가 자바이므로 개념을 지우려면 나와 채팅하고 싶습니다. 가능한 경우 알려주십시오. 내 이메일은 [email protected]입니다. 고맙습니다 –